Pythonのジェネレーター関数から一度に1つの値を取得する方法は?


113

非常に基本的な質問-Pythonでジェネレータから1つの値を取得するにはどうすればよいですか?

これまでのところ、書くことで入手できることがわかりましたgen.next()。これが正しい方法であることを確認したいだけですか?

回答:



66

Python <= 2.5では、を使用しますgen.next()。これはすべてのPython 2.xバージョンで機能しますが、Python 3.xでは機能しません

Python> = 2.6では、を使用しますnext(gen)。これは組み込み関数であり、より明確です。Python 3でも動作します。

これらはいずれも、特別な名前の関数を呼び出しますがnext()、これはサブクラス化によってオーバーライドできます。ただし、Python 3では、この関数の名前がに変更され__next__()、他の特別な関数との一貫性が保たれています。


16

使用(Python 3の場合)

next(generator)

ここに例があります

def fun(x):
    n = 0
    while n < x:
        yield n
        n += 1
z = fun(10)
next(z)
next(z)

印刷する必要があります

0
1


2

Python 3以降でジェネレーターオブジェクトに関連付けられた値を取得するには、を使用しますnext(<your generator object>)。next()への後続の呼び出しは、キューに連続するオブジェクト値を生成します。


1

Python 3でははありませんがgen.next()、引き続き使用できますnext(gen)。あなたが私に尋ねるなら少し奇妙ですが、それはそれがそうである方法です。


1
それはそれほど奇妙なことではありません。Python 3は物事を壊し、より明確でより良いコードのみを許可することになっています。後方互換性がないことは、いくつかの重大な変更のポイントです。
Tatarize
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.