2012-05-09 14 views

Respuesta

34

La forma en que lo publicó, es un SyntaxError.
Pero supongo que la declaración está dentro de []. Entonces es un list comprehension que crea una lista que contiene 100 números aleatorios. Es equivalente a este código:

whatever = [] 
for i in range(100): 
    whatever.append(randrange(10**10)) 

Si el código estaba dentro () en lugar de [] sería un generator expression, es decir, un iterable cuyos elementos no se crean inmediatamente sino en la demanda.

+2

Estaba dentro de un [], así que supongo que es una lista de comprensión. – KodeSeeker

25

Por sí solo, sería un error de sintaxis. Entre paréntesis, es una generator expression:

(randrange(10**10) for i in range(100)) 

devuelve un generador que producirá los resultados de 100 llamadas a randrange(10**10), uno a la vez.

entre corchetes, es una list comprehension:

[randrange(10**10) for i in range(100)] 

devuelve una lista de 100 números que resultan de una llamada a randrange(10**10) cada uno.

La ventaja de una expresión de generador sobre una lista de comprensión es que se evalúa perezosamente, por lo que no es necesario construir y mantener toda la lista en memoria (que es especialmente relevante con generadores muy grandes, posiblemente infinitos).

Cuestiones relacionadas