2012-05-09 11 views

Antwort

34

Die Art, wie Sie es gepostet haben, ist eine SyntaxError.
Aber ich denke, die Aussage ist innerhalb []. Dann ist es ein list comprehension, der eine Liste mit 100 Zufallszahlen erstellt. Es ist gleichbedeutend mit diesem Code:

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

Wenn der Code innerhalb () war statt [] wäre es ein generator expression sein, das heißt ein iterable, dessen Elemente sich sofort, aber auf Nachfrage nicht erstellt.

+2

Es war in einem [] also ich denke, es ist ein Listenverständnis. – KodeSeeker

25

Für sich allein wäre es ein Syntaxfehler. In Klammern, es ist ein generator expression:

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

einen Generator zurückgibt, die die Ergebnisse von 100 Anrufen randrange(10**10) ergeben werden, einen nach dem anderen.

in eckigen Klammern, es ist ein list comprehension:

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

gibt eine Liste von 100 Zahlen von einem Aufruf randrange(10**10) resultierenden jeder.

Der Vorteil eines Generatorausdrucks gegenüber einem Listenverständnis besteht darin, dass er lazy ausgewertet wird, so dass Sie nicht die gesamte Liste im Speicher aufbauen und behalten müssen (was besonders bei sehr großen, möglicherweise unendlichen Generatoren relevant ist).