¿Qué hace que algo sea iterable en Python? es decir. puede recorrerlo con for
Lo que hace que algo sea iterable en python
¿Es posible para mí crear una clase iterable en Python? ¿Si es así, cómo?
¿Qué hace que algo sea iterable en Python? es decir. puede recorrerlo con for
Lo que hace que algo sea iterable en python
¿Es posible para mí crear una clase iterable en Python? ¿Si es así, cómo?
Para hacer una clase iterable, escriba un método __iter__()
que devuelve un iterador. Ejemplo
class MyList(object):
def __init__(self):
self.list = [42, 3.1415, "Hello World!"]
def __iter__(self):
return iter(self.list)
m = MyList()
for x in m:
print x
impresiones
42
3.1415
Hello World!
el ejemplo se utiliza un iterador de lista, pero también se podrían escribir su propio iterador ya sea haciendo __iter__()
un generator o devolviendo una instancia de una clase de iterador que define un next()
método.
Este question le puede ayudar, se describe cómo realizar una interator
El Python documentation describe exactamente esto:
Un método necesita ser definido para objetos contenedores para proporcionar iteración de apoyo:
container.__iter__()
Devolución y devolución ator objeto. El objeto es necesario para admitir el protocolo de iterador que se describe a continuación. Si un contenedor admite diferentes tipos de iteración, se pueden proporcionar métodos adicionales para solicitar específicamente iteradores para esos tipos de iteración. (Un ejemplo de un objeto que admite múltiples formas de iteración sería una estructura de árbol que admite tanto transversal de ancho como primero de profundidad). Este método corresponde al intervalo de tp_iter de la estructura de tipo para objetos de Python en la API de Python/C.
El iterador objetos mismos se requieren para apoyar los dos métodos siguientes, que juntos forman el protocolo iterador:
iterator.__iter__()
Return el propio objeto iterador. Esto es necesario para permitir que los contenedores y los iteradores se utilicen con las instrucciones para y en. Este método corresponde al intervalo tp_iter de la estructura de tipo para objetos de Python en Python/C API.
iterator.next()
Volver al siguiente elemento del contenedor. Si no hay más elementos, levante la excepción StopIteration. Este método corresponde al intervalo tp_iternext de la estructura de tipo para objetos de Python en Python/C API.
Querrá next()
y __iter__()
métodos. Here's a nice little tutorial.
Ese tutorial es solo para Python 2. Para el registro, Python 3 existía cuando se publicó esta respuesta. Aquí está [uno] (http://nvie.com/posts/iterators-vs-generators/) para Python 3. –
Cualquier objeto con un método __iter__()
se considera iterable.
Además, cualquier secuencia (objetos que tengan un método __getitem__()
) podría devolver un iterador.Un iterador es un objeto con un método __next__()
que devuelve el siguiente objeto en la secuencia y arroja una excepción StopIteration.
También hay otra manera con '__getitem__', vea http://stackoverflow.com/a/9884259/284795 –
@ColonelPanic tiene razón, si define' __getitem__' la clase también es iterable. Sin embargo, ignorará que también definiste '__len__' y simplemente iterará indefinidamente. – jlh