和文档:
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) 'A' >>> next(a) 'B' >>> next(a) Traceback (most recent call last): File "<pyshell#36>", line 1, in <module> next(a) StopIteration >>> a = iter('abcd') #字符串序列 >>> a <str_iterator object at 0x03FB4FB0> >>> next(a) 'a' >>> next(a) 'b' >>> next(a) 'c' >>> next(a) 'd' >>> next(a) Traceback (most recent call last): File "<pyshell#29>", line 1, in <module> next(a) StopIteration
3. 2 番目のパラメータ Sentinel が提供される場合、最初のパラメータは調整可能なオブジェクトである必要があります。__next__ メソッドを使用するときに、戻り値と Sentinel 値が等しいときに、この調整可能なオブジェクトが使用されます。 、StopIteration を定期的に出力し、代を終了します。