我正在使用 for 循环和 if 语句的运算符中的python 。我的问题是 in 的实现方式,在这两种情况下它的行为有所不同:在使用 for 循环时进行迭代,并在与一起使用时检查是否存在某些元素如果声明?这是否取决于 for 和 if 的实现?
for i in x:
#iterates
if i in x:
#checks weather i in x or not
答案 0 :(得分:0)
in
关键字通常是一个运算符:
print(2 in [1, 2, 3]) # True
if 3 in range(7, 20):
print('3 in range!')
它对应于object.__contains__
特殊方法。表达式a in b
对应于type(b).__contains__(a)
。请注意,a
和b
都是要查找的名称。
在for
语句中,in
不是操作符。它是for .. in ..
语法的一部分,将循环变量 name 与可迭代变量分开。
for thing in range(20):
print(thing) # thing is something else on each step
请注意,只有for a in b
个b
是要查找的名称。 a
是要绑定的名称,类似于赋值语句。
Python语法具有几种构造,其中Lead关键字定义了后续关键字的含义。例如,as
关键字在import
和with
中具有不同的含义:
# as aliases ExitStack
from contextlib import ExitStack as ContextStack
# as holds the result of ContextStack().__enter__()
with ContextStack() as stack:
...
考虑此类关键字不是通过实现而是通过含义。例如,a in b
始终表示“ a
包含在b
中”。
答案 1 :(得分:0)
原因是for...in
与in
有所不同。
for x in y
遍历y
。
if x in y
呼叫y.__contains__(x)
。
答案 2 :(得分:0)
python中的关键字“ in”基于“ for”和“ if”解决了不同的目的。请查看this related link in stack overflow以获取更多信息
答案 3 :(得分:0)
使用in
进行成员资格测试是通过方法__contains__
(请参阅Documentation)进行的。不同的行为来自您之前的关键字for
和if
。
使用for
进行迭代的方式是,只要关键字next
之后的条件为true,就调用方法for
并将其返回值写入迭代变量。 。一般来说,成员资格测试只是一个条件。
代码
A in B
执行
B.__contains__(A) # returns boolean
代码
for A in B :
# Body
执行
A = B.next()
if B.__contains__(A) :
# Body
A = B.next()
if B.__contains__(A) :
# Body
# ...
A = B.next()
if B.__contains__(A) :
# B.next() throws "StopIteration" if there is no more element
答案 4 :(得分:0)
在许多语言中,您会发现具有多种用途的关键字。这仅仅是一个例子。考虑语句可能比像操作符那样考虑in
关键字更有用。
语句x in y
是一个布尔值语句(假设y
是适当的集合)True
仅当x
的值在该集合中时y
。它是通过__contains__
的{{1}}成员函数来实现的。
语句y
启动一个循环,其中每次迭代for x in y:
的值与集合x
的值不同。这是通过在生成的迭代器对象上使用y
和__iter__
的{{1}}成员函数来实现的。
还有其他可以显示y
关键字的语句,例如列表理解或生成器理解。