2009-03-17 6 views
14

Noté que Python2.6 agregó un siguiente() a list of global functions.¿Por qué Python 2.6 agregó una función global next()?

next(iterator[, default])

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

Si se da default, que se devuelve si se agota el iterador, de lo contrario StopIteration se eleva.

¿Cuál fue la motivación para agregar esto? ¿Qué puede hacer con next(iterator) que no puede hacer con iterator.next() y una cláusula except para manejar StopIteration?

Respuesta

18

Es por coherencia con funciones como len(). Creo que next(i) llama internamente al i.__next__().

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

+0

+1. La misma razón por la cual Python tiene una función len() incorporada. Consulte la respuesta aceptada a http://stackoverflow.com/questions/83983/why-isnt-the-len-function-inherited-by-dictionaries-and-lists-in-python para obtener el enlace al razonamiento de Guido. –

+0

+1: Citar los documentos. –

0

Se llama __next__ internamente, sino que hace que se vea más 'funcional' que 'orientado a objetos'. Eso sí, es solo mi opinión, pero no me gusta next(i) en lugar de i.next(). Pero como dijo Steve Mc, también ayuda un poco con la consistencia.

10

Tenga en cuenta que en Python 3.0+ el método next ha cambiado de nombre a __next__. Esto se debe a la coherencia. next es un método especial y los métodos especiales se nombran por convención (PEP 8) con doble guion y guion bajo final. Los métodos especiales no están destinados a ser llamados directamente, es por eso que se introdujo la función incorporada next.