2012-05-09 75 views

Trả lời

34

Cách bạn đăng, đó là SyntaxError.
Nhưng tôi đoán tuyên bố nằm bên trong []. Sau đó, nó là một list comprehension tạo danh sách chứa 100 số ngẫu nhiên. Nó tương đương với mã này:

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

Nếu mã là bên () thay vì [] nó sẽ là một generator expression, ví dụ: một iterable có mục này không được tạo ra ngay lập tức nhưng theo yêu cầu.

+2

Đó là bên trong một [] vì vậy tôi đoán nó là một danh sách hiểu .. – KodeSeeker

25

Ngày của riêng nó, nó sẽ là một lỗi cú pháp. Trong dấu ngoặc đơn, đó là một generator expression:

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

trả về một máy phát điện mà sẽ mang lại các kết quả của 100 cuộc gọi đến randrange(10**10), cùng một lúc.

Bên trong dấu ngoặc vuông, đó là một list comprehension:

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

trả về một danh sách 100 số kết quả từ một cuộc gọi đến randrange(10**10) mỗi.

Lợi thế của biểu thức máy phát trên danh sách hiểu là nó được đánh giá một cách lười biếng, vì vậy bạn không phải xây dựng và giữ toàn bộ danh sách trong bộ nhớ (đặc biệt phù hợp với máy phát vô hạn, rất lớn).

Các vấn đề liên quan