この記事では、Python のジェネレーターとイテレーターについて簡単に紹介します (例とともに)。これには一定の参考価値があります。必要な友人は参照できます。お役に立てば幸いです。
Python では、オブジェクトをループ (トラバース) できる場合、オブジェクト内の各要素のプロセスを反復と呼びます。たとえば、辞書、文字列、リスト、タプル、セットなどです。これらを反復できる理由は、すべてに共通の組み込み関数 __iter__ があるためです。組み込みオブジェクトの __next__ 関数を実行すると、オブジェクトのすべての要素を順番に出力できます。たとえば、1 ~ 100 の値を格納するリストがありますが、最初の 50 要素だけを出力したいとします。
flag=True l=[x for x in range(1,101)] l_iter = l.__iter__() while flag: try: item=l_iter.__next__() if item==51: flag=False break else: print(item) except: break
while ループでは、反復子は常にループして __next__() 関数を実行しますが、反復子自体は反復する必要がある要素の数を知りません。最後の要素が実行されると、引き続き __next__() 関数が実行されますが、この時点では反復できる要素がありません。反復子は反復できる要素を見つけることができないため、エラーが報告されます。そのため、while ループを使用する場合は、例外をキャッチするコード try else と併用することで、繰り返し処理中に例外が発生した場合、次のループが自動的に停止されます。
要件があるとします。最初と 2 番目の要素を除き、他の要素は最初の 2 つの要素の合計です。
#こんな感じで書けますdef fib1(max): n,a,b=0,0,1 while n<max: print(b) a,b=b,a+b n=n+1 return 'done' a=fib1(5) print(a)
1 1 2 3 5 done
def fib2(max): n,a,b=0,0,1 while n<max: yield b a,b=b,a+b n=n+1 return 'done'
a=fib2(5) print(a)
1
a=fib2(5) for c in a: print(c)
以上がPython のジェネレーターとイテレーターの簡単な紹介 (例付き)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。