2

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

in

蟒蛇内部。这非常困难,因为搜索引擎无法使用像 in 这样的词。

4

3 回答 3

7

" in" 不是函数。它是一个内置关键字。使用它可以触发目标对象__contains__()

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

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

我说“可以触发”是因为逻辑有不同的方式可以在后台解决:

对于未定义__contains__()的对象,成员资格测试首先尝试迭代 via __iter__(),然后尝试旧的序列迭代协议 via__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'
于 2012-06-12T21:43:54.027 回答
4

对于该in结果的布尔值的使用,请参阅http://docs.python.org/reference/expressions.html#membership-test-details。您还可以in在表单中以几种不同的方式使用for item in collection,其信息可在同一页面上找到。

运算符的内部机制in在此页面上有详细说明:http: //docs.python.org/reference/datamodel.html - 它的要点是支持它的对象需要提供__contains__()布尔使用的方法,我考虑__iter__() 使用for item in collection

于 2012-06-12T21:44:27.473 回答
1

我认为它被称为“ __contains__”。

于 2012-06-12T21:47:13.743 回答