in Python中的运算符是一个成员运算符,用于测试序列中的成员资格.
in运营商的描述
如果在指定序列中找到变量,则求值为true,否则求值为false.
现在考虑代码:
>>>s = 'HELLO'
>>>char = 'M'
>>>char in s
False
>>>for char in s:
.... print(char)
H
E
L
L
O
Run Code Online (Sandbox Code Playgroud)
请在这里纠正我:我想声明for char in s应该检查'M'在'HELLO'其中进行评估,False并循环应该结束.但是在这里,它不是检查成员资格,而是将每个字符分配给变量char,因此循环打印每个字符.我的问题是,in除了检查会员资格外,如何使用运营商?
该in关键字用于两种不同的上下文:
如你所说,第一个通过调用序列来检查某些东西是否属于一个序列__contains__.使用此语法时,将返回布尔值.
x = 1
l = [0, 1, 2]
if x in l:
print("x is in l")
else:
print("x is not in l")
Run Code Online (Sandbox Code Playgroud)
> x is in l
由于in查找__contains__方法,x in seq只要seq实现一个__contains__方法就有效.关于成员资格的概念,您可以实现这一点,即使它没有逻辑意义.
class Foo:
def __contains__(self, x):
return x == 12
f = Foo()
if 12 in f:
print("12 is in f")Run Code Online (Sandbox Code Playgroud)
> 12 is in f
第二个实际上更经常使用.根据迭代协议,它枚举可迭代对象的元素,以便可以对它们执行操作.
您可以迭代列表:
l = [0, 1, 2]
for x in l:
print(x)Run Code Online (Sandbox Code Playgroud)
> 0 > 1 > 2
在一个字符串:
s = "hello"
for c in s:
print(c)Run Code Online (Sandbox Code Playgroud)
> h > e > l > l > o
并且在实现该__iter__方法的任何对象上,只要后者返回实现该__next__方法的对象.
以下示例是一个基本的(不是说"差")range类,您可以迭代实例.
class Bar:
def __init__(self, first, last):
self.first = first
self.last = last
self.current = first
def __iter__(self):
return self
def __next__(self):
if self.current == self.last:
raise StopIteration
result = self.current
self.current += 1
return result
b = Bar(0, 5)
for i in b:
print(i)Run Code Online (Sandbox Code Playgroud)
> 0 > 1 > 2 > 3 > 4
从语义上讲,in在两种情境中使用相同的单词是有意义的."那东西是这个东西吗?" 是一个有效的问题,只要"stuff"是一个集合,它能够包含东西.从此以后,"为那东西中的每一件事做这件事"似乎很自然.
因此,对于两种情境都使用"in".
然而,这实际上是对现实的简化,实际上更为广阔.我邀请您阅读文档,并深入了解该in关键字,阅读Python的语法.