ホームページ  >  記事  >  バックエンド開発  >  Python 組み込み関数 iter

Python 組み込み関数 iter

高洛峰
高洛峰オリジナル
2016-11-04 14:52:381315ブラウズ

和文档:

iter(object[, sentinel])

イテレータ オブジェクトを返します。最初の引数は、2 番目の引数の有無に応じて大きく解釈されます。 2 番目の引数がない場合、オブジェクトは反復プロトコル (__iter__() メソッド) をサポートするコレクション オブジェクトであるか、シーケンス プロトコル (0 から始まる整数の引数を持つ __getitem__() メソッド) をサポートするコレクション オブジェクトである必要があります。これらのプロトコルのいずれもサポートしていない場合は、TypeError が発生します。 2 番目の引数であるセンチネルが指定されている場合、オブジェクトは呼び出し可能なオブジェクトである必要があります。この場合に作成されたイテレータは、its__next__() メソッドの呼び出しごとに引数なしでオブジェクトを呼び出します。返された値が Sentinel と等しい場合、StopIteration が発生し、それ以外の場合は値が返されます。

iter() の 2 番目の形式の便利な応用の 1 つは、特定の行に達するまでファイルの行を読み取ることです。次の例では、readline() メソッドが空の文字列を返すまでファイルを読み取ります:

with open('mydata.txt') as fp: for line in iter(fp.readline, ''):
process_line(line)

説明:

1. 関数関数は可継代オブジェクトを返します。的集合(字典、集合、不可变集合)、または順序列荏议(つまり现了__getitem__() メソッド、メソッド受信一个从0开始的整数パラメータ) の順序列(元组、列表、文字列)、否か

>>> a = iter({'A':1,'B':2}) #字典集合
>>> a
<dict_keyiterator object at 0x03FB8A50>
>>> next(a)
&#39;A&#39;
>>> next(a)
&#39;B&#39;
>>> next(a)
Traceback (most recent call last):
  File "<pyshell#36>", line 1, in <module>
    next(a)
StopIteration
 
>>> a = iter(&#39;abcd&#39;) #字符串序列
>>> a
<str_iterator object at 0x03FB4FB0>
>>> next(a)
&#39;a&#39;
>>> next(a)
&#39;b&#39;
>>> next(a)
&#39;c&#39;
>>> next(a)
&#39;d&#39;
>>> next(a)
Traceback (most recent call last):
  File "<pyshell#29>", line 1, in <module>
    next(a)
StopIteration

3. 2 番目のパラメータ Sentinel が提供される場合、最初のパラメータは調整可能なオブジェクトである必要があります。__next__ メソッドを使用するときに、戻り値と Sentinel 値が等しいときに、この調整可能なオブジェクトが使用されます。 、StopIteration を定期的に出力し、代を終了します。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。