找到函数“in”的文档页面

时间:2012-06-12 21:39:50

标签: python

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

in

内部python。这很难,因为搜索引擎无法使用像。中的单词。

3 个答案:

答案 0 :(得分:7)

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

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

>>> l = ['a']
>>> l.__contains__('a')
True
>>> 'a' in l
True

我说“可以触发”因为逻辑有不同的方式可以解决问题:

  

对于未定义__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

如果对象没有定义__iter__(),它将尝试使用较旧的__getitem__()。例如,取一个没有__iter__()的字符串。这只是一个例子...

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

并显示类似的迭代器(生成器):

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

答案 1 :(得分:4)

如果使用导致布尔值的in,请参阅http://docs.python.org/reference/expressions.html#membership-test-details。您也可以in格式以for item in collection的形式使用in,其信息可在同一页面上获取。

此页面详细介绍了__contains__()运算符的内部机制:http://docs.python.org/reference/datamodel.html - 它的要点是支持它的对象需要为布尔值提供__iter__()方法用法,我认为for item in collection使用{{1}}。

答案 2 :(得分:1)

我认为它被称为“__contains__”。