¿Cuál es el resultado de una expresión de rendimiento en Python?

Sé que el rendimiento convierte una función en un generador, pero ¿cuál es el valor de retorno de la propia expresión de rendimiento? Por ejemplo:

def whizbang(): for i in range(10): x = yield i 

¿Cuál es el valor de la variable x cuando se ejecuta esta función?

He leído la documentación de Python: http://docs.python.org/reference/simple_stmts.html#grammar-token-yield_stmt y no parece haber ninguna mención del valor de la expresión de rendimiento en sí.

Related of "¿Cuál es el resultado de una expresión de rendimiento en Python?"

También puede send valores a los generadores. Si no se envía ningún valor, entonces x es None , de lo contrario, x toma el valor enviado. Aquí hay alguna información: http://docs.python.org/whatsnew/2.5.html#pep-342-new-generator-features

 >>> def whizbang(): for i in range(10): x = yield i print 'got sent:', x >>> i = whizbang() >>> next(i) 0 >>> next(i) got sent: None 1 >>> i.send("hi") got sent: hi 2 

Aquí hay un ejemplo de rendimiento para dar salida amortiguada de, por ejemplo, un gran cahce

 #Yeild def a_big_cache(): mystr= [] for i in xrange(100): mystr.append("{}".format(i)) return mystr my_fat_cache = a_big_cache() def get_in_chunks(next_chunk_size): output =[] counter = 0 for element in my_fat_cache: counter += 1 output.append(element) if counter == next_chunk_size: counter = next_chunk_size next_chunk_size+= next_chunk_size yield output del output[:] r = get_in_chunks(10) print next(r) print next(r) 

La salida es

[‘0’, ‘1’, ‘2’, ‘3’, ‘4’, ‘5’, ‘6’, ‘7’, ‘8’, ‘9’]

[’10’, ’11’, ’12’,> ’13’, ’14’, ’15’, ’16’, ’17’, ’18’, ’19’]

Este código producirá alguna salida

 def test(): for i in range(10): x = yield i t = test() for i in test(): print i