2009-03-17 14 views
14

Ho notato che Python2.6 ha aggiunto un prossimo() al suo list of global functions.Perché Python 2.6 ha aggiunto una funzione next() globale?

next(iterator[, default])

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

Se default è dato, viene restituito se l'iteratore si esaurisce, altrimenti StopIteration viene sollevata.

Qual è stata la motivazione per l'aggiunta di questo? Cosa si può fare con next(iterator) che non si può fare con iterator.next() e una clausola except per gestire StopIteration?

risposta

18

È solo per coerenza con funzioni come len(). Credo che next(i) chiami internamente al numero i.__next__().

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

+0

+1. La stessa ragione per cui Python ha una funzione len() integrata. Vedi la risposta accettata a http://stackoverflow.com/questions/83983/why-isnt-the-len-function-edherited-by-dictionaries-and-lists-in-python per il link alla logica di Guido. –

+0

+1: cita i documenti. –

0

Chiede __next__ internamente, ma lo fa apparire piu 'funzionali' che 'orientato agli oggetti'. Intendiamoci che è solo la mia opinione, ma non mi piace next(i) anziché i.next(). Ma come ha detto Steve Mc, aiuta anche leggermente con coerenza.

10

Si noti che in Python 3.0+ il metodo next è stato rinominato in __next__. Questo è dovuto alla coerenza. next è un metodo speciale e i metodi speciali sono denominati per convenzione (PEP 8) con doppio trattino di sottolineatura iniziale e finale. I metodi speciali non sono pensati per essere chiamati direttamente, ecco perché è stata introdotta la funzione integrata next.

Problemi correlati