Python入門 interについて
マニュアル
https://docs.python.org/ja/3/library/functions.html?highlight=iter#iter
マニュアルを読むと、第二引数があるかどうかで第一引数の解釈がかなり変わってくると記載されている。
第二引数がない場合
第一引数に int を指定するとTypeErrorエラーになる。
>>> iter('apple')
<str_iterator object at 0x10b9b1070>
>>> iter(['apple'])
<list_iterator object at 0x10b994bb0>
>>> iter({'apple'})
<set_iterator object at 0x10b505ec0>
>>> iter(100)
Traceback (most recent call last):
File "<pyshell#15>", line 1, in <module>
iter(100)
TypeError: 'int' object is not iterable
これはマニュアルのこの部分に書いてあるぽい。
第二引数がない場合、 object は反復プロトコル (
https://docs.python.org/ja/3/library/functions.html?highlight=iter#iter__iter__()
メソッド) か、シーケンスプロトコル (引数が0
から開始する__getitem__()
メソッド) をサポートする集合オブジェクトでなければなりません。
interはイテレータオブジェクトを返すので、next()の引数にとることができる。
#! /usr/bin/env python3
hoge = iter('apple')
while True:
try:
print(next(hoge))
except:
break
第二引数がある場合
第二引数がある場合は、第一引数は呼び出し可能オブジェクトでなくてはいけない。
第二引数 sentinel が与えられているなら、 object は呼び出し可能オブジェクトでなければなりません。この場合に生成されるイテレータは、
__next__()
を呼ぶ毎に object を引数無しで呼び出します。返された値が sentinel と等しければ、StopIteration
が送出され、そうでなければ、戻り値がそのまま返されます。
呼び出し可能オブジェクトかどうかはcallable()で確認可能。
#! /usr/bin/env python3
import random
def my_func():
return random.randrange(1, 5)
print(callable(my_func))
1 – 4 までのランダムな数を返す関数が4を返すまで実行する例
#! /usr/bin/env python3
import random
def my_func():
return random.randrange(1, 5)
foo = iter(my_func, 4)
while True:
try:
print(next(foo))
except:
break
ディスカッション
コメント一覧
まだ、コメントがありません