88

この質問では、Python ジェネレーターを使用した無限のシーケンスがあります。しかし、関数がないように見えるため、同じコードは Python 3 では機能しませんnext()next関数に相当するものは何ですか?

def updown(n):
    while True:
        for i in range(n):
            yield i
        for i in range(n - 2, 0, -1):
            yield i

uptofive = updown(6)
for i in range(20):
    print(uptofive.next())
4

2 に答える 2

129

Python 3 では、next(uptofive)代わりに を使用しuptofive.next()ます。

組み込みnext()関数は、Python 2.6 以降でも機能します。

于 2012-09-05T04:48:35.250 に答える
45

Python 3 では、構文の一貫性を高めるために、next()メソッドの名前が に変更されました__next__()。あなたはそれを使うことができます。これはPEP 3114で説明されています。

Greg の解決策に従い、組み込みnext()関数__next__()を呼び出す (オブジェクトのメソッドを見つけようとする) ことをお勧めします。

于 2012-09-05T08:39:47.170 に答える