2009-03-17 10 views
14

Ich habe festgestellt, dass Python2.6 eine next() zu ihr list of global functions hinzugefügt hat.Warum hat Python 2.6 eine globale next() -Funktion hinzugefügt?

next(iterator[, default])

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

Wenn default gegeben wird, wird es zurückgegeben, wenn der Iterator erschöpft ist, sonst StopIteration angehoben.

Was war die Motivation für das Hinzufügen? Was können Sie mit next(iterator) tun, dass Sie nicht mit iterator.next() und einer except Klausel umgehen können, um die StopIteration zu behandeln?

Antwort

18

Es ist nur für Konsistenz mit Funktionen wie len(). Ich glaube, next(i) Anrufe i.__next__() intern.

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

+0

+1. Aus dem gleichen Grund hat Python eine eingebaute len() -Funktion. Siehe die akzeptierte Antwort zu http://stackoverflow.com/questions/83983/why-isnt-the-len-function-inherited-by-dictionaries-and-lists-in-python für den Link zu Guidos Begründung. –

+0

+1: Zitieren Sie die Dokumente. –

0

Es __next__ ruft intern, aber es macht es aussehen ‚funktional‘ als ‚objektorientiert‘. Wohlgemerkt, das ist nur meine Meinung, aber ich mag nicht next(i) anstatt i.next(). Aber wie Steve Mc sagte, hilft es auch leicht mit Konsistenz.

10

Beachten Sie, dass in Python 3.0+ die Methode next in __next__ umbenannt wurde. Dies ist wegen der Konsistenz. next ist eine spezielle Methode und spezielle Methoden werden per Konvention (PEP 8) mit doppelten führenden und abschließenden Unterstrich benannt. Spezielle Methoden sollen nicht direkt aufgerufen werden, deshalb wurde die eingebaute Funktion next eingeführt.

Verwandte Themen