Consideremos el siguiente código Python:¿Los argumentos de longitud variable de python (* args) expanden un generador en el tiempo de llamada a la función?
def f(*args):
for a in args:
pass
foo = ['foo', 'bar', 'baz']
# Python generator expressions FTW
gen = (f for f in foo)
f(*gen)
¿Se *args
expande automáticamente el generador a llamadas en tiempo? Dicho de otra manera, ¿estoy iterando sobre gen
dos veces dentro de f(*gen)
, una vez para expandir *args
y una vez para iterar sobre args? ¿O se conserva el generador en condiciones prístinas, mientras que la iteración solo ocurre una vez durante el ciclo for?
Sería bueno agregar al final del ejemplo que al llamar 'f (* gen)' por segunda vez se devuelve '()', para mostrar que al invocar 'f' se agota el generador para las líneas subsiguientes. – cjerdonek