iteradores python3 y generadores

iterador

La iteración es una de las características más potentes de Python, es una manera de acceder a una colección de elementos, sino que también puede recordar una posición de desplazamiento del objeto, que cuenta con dos métodos básicos: iter () y next ().
Cadenas, listas, tuplas o los objetos pueden ser utilizados para crear un iterador, tales como:

>>> list=[1,2,3,4]
>>> it = iter(list)    # 创建迭代器对象
>>> print (next(it))   # 输出迭代器的下一个元素
1
>>> print (next(it))   #继续输出迭代器的下一个元素
2
list=[1,2,3,4]
it = iter(list)    # 创建迭代器对象
for x in it:
    print (x, end=" ")
import sys         # 引入 sys 模块
 
list=[1,2,3,4]
it = iter(list)    # 创建迭代器对象
 
while True:
    try:
        print (next(it))
    except StopIteration:
        sys.exit()

Cómo crear un iterador

Una clase para ser utilizado como una necesidad iterador para implementar dos métodos en la clase ITER () y Siguiente ().

  • ITER () devuelve un objeto especial iterador, el objeto implementos iterador el siguiente método por terminación de iteración bandera StopIteration anormalidad ().
  • Siguiente () devuelve el método el siguiente objeto iterador.

Por ejemplo, para crear un digital vuelve iterador el valor inicial 1, aumentando gradualmente 1:

class MyNumbers:
  def __iter__(self):
    self.a = 1
    return self
 
  def __next__(self):
    x = self.a
    self.a += 1
    return x
 
myclass = MyNumbers()
myiter = iter(myclass)
 
print(next(myiter))
print(next(myiter))
print(next(myiter))
print(next(myiter))
print(next(myiter))

generador

Constructor es un programa especial, se puede utilizar para controlar el comportamiento del bucle iterativo, el generador es un iterador Python, utilizando los valores de retorno de la función de rendimiento, cada uno de pausas de llamadas rendimiento, y se pueden utilizar next () la función, y send () restaura la función del generador.

Generación de un valor de retorno es similar a la matriz de una función que puede aceptar parámetros, se puede llamar, sin embargo, diferente de los generales devuelve la función de tiempo uno una matriz que comprende todos los valores, el generador puede producir solamente un valor, de modo que cantidad consumida de la memoria se reducirá en gran medida, y se permite que las funciones de llamada puede volver rápidamente valor de unos pocos de tratamiento previo, y por lo tanto se parece a un generador de funciones, pero se comporta como un iterador

La diferencia es que con una función ordinaria, el generador es una función de retorno iterador sólo se puede utilizar a la operación iterate, generador más simplemente entendido es un iterador.
Llamar a una función de generador, devuelve un objeto iterador.

Rendimiento que se obtiene utilizando columnas de Fibonacci:

import sys
 
def fibonacci(n): # 生成器函数 - 斐波那契
    a, b, counter = 0, 1, 0
    while True:
        if (counter > n): 
            return
        yield a
        a, b = b, a + b
        counter += 1
f = fibonacci(10) # f 是一个迭代器,由生成器返回生成
 
while True:
    try:
        print (next(f), end=" ")
    except StopIteration:
        sys.exit()
Publicado 33 artículos originales · ganado elogios 1 · vistas 1260

Supongo que te gusta

Origin blog.csdn.net/weixin_44783002/article/details/96457661
Recomendado
Clasificación