2009-03-17 8 views
14

Python2.6がそれにlist of global functionsというnext()を追加したことに気付きました。Python 2.6でグローバルなnext()関数が追加されたのはなぜですか?

next(iterator[, default])

Retrieve the next item from the iterator by calling its next() method. 

defaultが与えられている場合 イテレータが消耗している場合、それは、そうでない場合は StopIterationを上げて、返されます。

これを追加する動機は何でしたか? next(iterator)で何ができますか?とexceptという句でStopIterationを処理することはできません。

答えて

18

len()のような機能と一貫性があります。 next(i)i.__next__()を内部的に呼び出します。

http://www.python.org/dev/peps/pep-3114/

+0

+1。同じ理由から、Pythonにはlen()関数が組み込まれています。 Guidoの根拠へのリンクについては、http://stackoverflow.com/questions/83983/why-isnt-the-len-function-inherited-by-dictionaries-and-lists-in-pythonの受け入れられた回答を参照してください。 –

+0

+1:ドキュメントを引用してください。 –

0

を参照してください。これは、内部__next__を呼び出しますが、それはそれはオブジェクト指向の 'より多くの「機能」を見ます。あなたは私の意見ですが、i.next()ではなくnext(i)が好きではありません。しかし、スティーブ・マックが言ったように、それは一貫性を持ってやや役立ちます。

10

Python 3.0以降では、nextメソッドの名前が__next__に変更されています。これは一貫性のためです。 nextは特別な方法であり、特別な方法は、コンベンション(PEP 8)で名前の前後に二重の先頭と末尾に付けられます。特別なメソッドは直接呼び出されることを意図したものではないため、組み込み関数nextが導入されました。

関連する問題