2012-05-09 24 views

Odpowiedz

34

Sposób, w jaki to opublikowałeś, to SyntaxError.
Ale myślę, że oświadczenie znajduje się wewnątrz []. Następnie jest to list comprehension, który tworzy listę zawierającą 100 liczb losowych. Jest to równoznaczne z tym kodem:

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

Jeśli kod był wewnątrz () zamiast [] byłoby to generator expression, tj iterable którego elementy nie są tworzone od razu, ale na żądanie.

+2

To było wewnątrz [], więc myślę, że jest to zrozumienie listy ... – KodeSeeker

25

Sam w sobie byłby błąd składniowy. W nawiasach, to generator expression:

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

zwraca generator, który przyniesie rezultaty 100 zaproszeń do randrange(10**10), po jednym na raz.

nawiasach kwadratowych, to list comprehension:

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

zwraca listę 100 numerów wynikających z wywołania randrange(10**10) każdego.

Zaletą wyrażenia generatora w porównaniu ze zrozumieniem listy jest to, że jest on leniwie oceniany, więc nie trzeba tworzyć i przechowywać całej listy w pamięci (co jest szczególnie istotne w przypadku bardzo dużych, prawdopodobnie nieskończonych generatorów).

Powiązane problemy