2010-02-12 35 views
5

Tôi đang cố gắng hiểu cách thức và khi nào các biểu thức trình vòng lặp được đánh giá. Sau đây có vẻ là một biểu hiện lười biếng:Trình lặp lười biếng của Python

g = (i for i in range(1000) if i % 3 == i % 2) 

này một, tuy nhiên không thành công trên xây dựng:

g = (line.strip() for line in open('xxx', 'r') if len(line) > 10) 

Tôi không có tệp có tên 'xxx'. Tuy nhiên, kể từ khi điều này là lười biếng, tại sao nó không sớm như vậy?

Cảm ơn.

EDI: Wow, tôi đã làm một người lười biếng!

g = (line.strip() for i in range(3) for line in open(str(i), 'r')) 
+0

cho i trong phạm vi (1) gấp ba lần so với i trong phạm vi (3) – Jimmy

Trả lời

4

Từ documentation:

biến được sử dụng trong các biểu hiện phát được đánh giá một cách lười biếng trong một phạm vi riêng biệt khi các phương pháp next() được gọi là cho đối tượng phát (trong thời trang tương tự như đối bình thường máy phát điện). Tuy nhiên, in biểu hiện của for khoản tận cùng bên trái ngay lập tức được đánh giá trong phạm vi hiện để một lỗi sản xuất bởi nó có thể được nhìn thấy trước khi bất kỳ lỗi khác có thể có trong đoạn code đó xử lý các biểu hiện máy phát điện.

6

Lặp lại qua tệp được trả về bởi cuộc gọi tới open() là không hợp lệ. Cuộc gọi đến open() thì không.

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