26

Python 2.6 でnext関数が導入されました。

なぜこれが必要だったのですか?obj.next()の代わりにいつでも入力できnext(obj)ます。

後者の方が多いpythonicですか?

4

3 に答える 3

39

PEP 3114は、この変更について説明しています。動機についての抜粋:

この PEP は、nextメソッドの名前を に変更することを提案して__next__います。これは、メソッドが言語レベルのプロトコルの一部として暗黙的に呼び出される Python の他のすべてのプロトコルと一致し、メソッドnextを呼び出すために という名前の組み込み関数を導入すること__next__と一致しています。他のプロトコルが明示的に呼び出される方法。

より興味深い詳細については、必ずこの PEP をお読みください。

ビルトインを使用する理由については、Python 3 でこのメソッドがなくなったことが 1 つの正当な理由です。そのため、移植性のために、できるだけ早くビルトインの使用を開始することをお勧めします。nextnextnext

于 2012-05-02T13:05:31.653 に答える
28

next(iterator[, default])

そのin python 3)メソッドを呼び出して、イテレータから次の項目を取得します。デフォルトが指定されている場合、イテレータが使い果たされた場合は返され、そうでない場合は発生します。next()(__next__()StopIteration

あなたはdefaultオプションを取得します。

于 2012-05-02T12:56:59.480 に答える
12

明らかな追加機能とは別に、ジェネレータ式と一緒に使用すると見栄えも良くなります。比較

(x for x in lst if x > 2).next()

next(x for x in lst if x > 2)

後者は、Python の残りのスタイルである IMHO とより一貫性があります。

于 2012-05-02T12:58:30.097 に答える