関数のドキュメントを見つけようとしています
in
Pythonの内部。検索エンジンはのような単語では機能できないため、非常に困難です。
「in
」は関数ではありません。その組み込みのキーワード。これを使用すると、ターゲットオブジェクトをトリガーできます__contains__()
http://docs.python.org/reference/datamodel.html#object。含む
>>> 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'
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
ください。
「」と呼ばれていると思います__contains__
。