Python 'in' 运算符与 'for' 循环和 'if' 语句
Python 'in' operator with 'for' loop and with 'if' statement
我正在使用 python in 运算符与 for 循环和 if 陈述。我的问题是 in 是如何实现的,它在这两种情况下的行为不同:它在使用 for 循环时进行迭代,并检查是否存在某些元素使用 with if 语句时?这是否取决于 for 和 if?
的实施
for i in x:
#iterates
if i in x:
#checks weather i in x or not
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 语法有几种构造,其中前导关键字定义了后续关键字的含义。例如,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
”。
原因是 for...in
与 in
不同。
for x in y
遍历 y
.
if x in y
呼叫 y.__contains__(x)
.
python中的关键字"in"根据"for"和"if"解决了不同的用途。请查看 this related link in stack overflow 以更清楚地了解
in
的成员资格测试是通过 __contains__
方法实现的(参见 Documentation)。不同的行为来自之前的关键字,for
和 if
在你的例子中。
使用 for
的迭代是这样实现的,即调用方法 next
并将其 return 值写入迭代变量,只要关键字 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
在许多语言中,您会发现具有多种用途的关键字。这只是一个例子。从 语句 的角度思考可能比像运算符那样思考 in
关键字更有帮助。
语句 x in y
是一个布尔值语句,当且仅当 x
的值在集合 y
。它是用y
.
的__contains__
成员函数实现的
语句 for x in y:
开始一个循环,其中每次迭代 x
从集合 y
中获取不同的值。这是使用 y
和 __next__
的 __iter__
成员函数在生成的迭代器对象上实现的。
还有其他语句可以出现 in
关键字,例如列表理解或生成器理解。
我正在使用 python in 运算符与 for 循环和 if 陈述。我的问题是 in 是如何实现的,它在这两种情况下的行为不同:它在使用 for 循环时进行迭代,并检查是否存在某些元素使用 with if 语句时?这是否取决于 for 和 if?
的实施 for i in x:
#iterates
if i in x:
#checks weather i in x or not
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 语法有几种构造,其中前导关键字定义了后续关键字的含义。例如,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
”。
原因是 for...in
与 in
不同。
for x in y
遍历 y
.
if x in y
呼叫 y.__contains__(x)
.
python中的关键字"in"根据"for"和"if"解决了不同的用途。请查看 this related link in stack overflow 以更清楚地了解
in
的成员资格测试是通过 __contains__
方法实现的(参见 Documentation)。不同的行为来自之前的关键字,for
和 if
在你的例子中。
使用 for
的迭代是这样实现的,即调用方法 next
并将其 return 值写入迭代变量,只要关键字 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
在许多语言中,您会发现具有多种用途的关键字。这只是一个例子。从 语句 的角度思考可能比像运算符那样思考 in
关键字更有帮助。
语句 x in y
是一个布尔值语句,当且仅当 x
的值在集合 y
。它是用y
.
__contains__
成员函数实现的
语句 for x in y:
开始一个循环,其中每次迭代 x
从集合 y
中获取不同的值。这是使用 y
和 __next__
的 __iter__
成员函数在生成的迭代器对象上实现的。
还有其他语句可以出现 in
关键字,例如列表理解或生成器理解。