in
キーワードが2つの異なるコンテキストで使用されている:あなたが言ったようにそれを呼び出すことにより、チェック何かがシーケンスに属している場合、最初の
配列__contains__
。この構文を使用すると、ブール値が返されます。 in
以来
> x is in l
x = 1
l = [0, 1, 2]
if x in l:
print("x is in l")
else:
print("x is not in l")
は
__contains__
メソッドを実装し
seq
限り
x in seq
が有効である、
__contains__
方法を探します。メンバーシップの概念に関しては論理的な意味を持たなくても実装できます。
> 12 is in f
二
class Foo:
def __contains__(self, x):
return x == 12
f = Foo()
if 12 in f:
print("12 is in f")
は、実際にはより頻繁に使用されています。
iteration protocolによれば、iterableオブジェクトの要素を列挙し、そのオブジェクトに対してアクションを実行することができます。文字列が経つにつれて
l = [0, 1, 2]
for x in l:
print(x)
> 0
> 1
> 2
:
あなたは、リストを反復処理することができます
> h
> e
> l
> l
> o
そして__iter__
メソッドを実装する任意のオブジェクトの上に
s = "hello"
for c in s:
print(c)
限り、後者のリターン
__next__
メソッドを実装するオブジェクトです。
次の例は、基本的な(「貧弱」とは言わない)range
のようなクラスで、インスタンスを反復処理できます。
class Bar:
def __init__(self, first, last):
self.first = first
self.last = last
self.current = first
def __iter__(self):
return self
def __next__(self):
if self.current == self.last:
raise StopIteration
result = self.current
self.current += 1
return result
b = Bar(0, 5)
for i in b:
print(i)
> 0
> 1
> 2
> 3
> 4
ネイティブ型の多くは反復可能です:dictionaries、ranges、sets ...
は意味的に言えば、それは両方のコンテキストに同じin
言葉を使うことは理にかなっています。 「このことがそのようなものですか?」 「もの」が物を含むことができるコレクションである限り、有効な質問です。それ以来、「そのことのすべてのことに対してこれを行う」はかなり自然なようです。
したがって、両方のコンテキストに「in」を使用します。
しかし、これは現実のかなり単純化ですが、実際はもっと広大です。 documentationをお読みいただき、in
キーワードの詳細についてはPython's grammarをお読みください。
あなたが必要とする主なものの存在のために、すべてのリストの要素をテストしますここで思うには、キーワード 'n'を使用すると、それはcharまたはループのすべての行を再定義します。 –