estoy jugando un poco con los generadores y las expresiones generadoras y no estoy completamente seguro de que entiendo cómo funcionan (some reference material):Tratar de entender el rendimiento como una expresión
>>> a = (x for x in range(10))
>>> next(a)
0
>>> next(a)
1
>>> a.send(-1)
2
>>> next(a)
3
lo que parece que fue generator.send
ignorado Eso tiene sentido (supongo) porque no hay yield
expresión explícita para captar la información enviada ...
Sin embargo,
>>> a = ((yield x) for x in range(10))
>>> next(a)
0
>>> print next(a)
None
>>> print next(a)
1
>>> print next(a)
None
>>> a.send(-1) #this send is ignored, Why? ... there's a yield to catch it...
2
>>> print next(a)
None
>>> print next(a)
3
>>> a.send(-1) #this send isn't ignored
-1
entiendo que esto es bastante lejos de allí, y yo (en la actualidad) puede No piense en un caso de uso para esto (así que no pregunte;)
Estoy explorando principalmente para tratar de descubrir cómo funcionan estos diversos métodos de generador (y cómo funcionan las expresiones de generador en general). ¿Por qué mi segundo ejemplo alterna entre producir un valor razonable y None
? Además, ¿alguien puede explicar por qué uno de mis generator.send
fue ignorado mientras que el otro no?
Compruebe si este enlace puede ayudarlo ... http://stackoverflow.com/questions/231767/the-python-yield-keyword-explained –