找到函数"in"的文档页面

Web*_*ter 2 python

我正在尝试找到该功能的文档

in
Run Code Online (Sandbox Code Playgroud)

里面的蟒蛇.这很难,因为搜索引擎无法使用像中的单词.

jdi*_*jdi 7

" in"不是一种功能.它是一个内置的关键字.使用它可以触发目标对象__contains__()

http://docs.python.org/reference/datamodel.html#object.包含

>>> l = ['a']
>>> l.__contains__('a')
True
>>> 'a' in l
True
Run Code Online (Sandbox Code Playgroud)

我说"可以触发"因为逻辑有不同的方式可以在引擎盖下解决:

对于未定义的对象,__contains__()成员资格测试首先尝试迭代__iter__(),然后是旧的序列迭代协议__getitem__()

请注意,此示例仅涵盖成员资格测试,而不是使用它来遍历可迭代.

为了说明in在循环操作期间如何解决,首先使用__iter__()以下方法查找迭代器:

l = range(5)
l.__iter__()
# <listiterator object at 0x1004e4fd0>
it = l.__iter__()
it.next()
# 0
it.next()
# 1
it.next()
# 2
Run Code Online (Sandbox Code Playgroud)

如果对象没有__iter__()定义,它将尝试使用旧版本__getitem__().拿一根绳子,例如,没有绳子__iter__().这只是一个例子......

>>> i = 0
>>> s = "string"
>>> while i < len(s):
...  print s.__getitem__(i)
...  i+=1
... 
s
t
r
i
n
g
Run Code Online (Sandbox Code Playgroud)

并显示一个类似的迭代器(这里的生成器):

gen = (s.__getitem__(i) for i in xrange(len(s)))
# <generator object <genexpr> at 0x1004e8780>
gen.next()
# 's'
gen.next()
# 't'
gen.next()
# 'r'
Run Code Online (Sandbox Code Playgroud)