2016-01-27 14 views
6

Sự khác biệt giữa việc hiểu danh sách và hiểu thấu máy phát với yield bên trong là gì? Cả hai trở về một đối tượng máy phát điện (listcompgenexpr tương ứng), nhưng khi đánh giá đầy đủ sau này thêm những gì dường như là khá dư thừa None s.Sự khác biệt giữa việc hiểu danh sách và hiểu máy phát điện với `năng suất` bên trong

>>> list([(yield from a) for a in zip("abcde", itertools.cycle("12"))]) 
['a', '1', 'b', '2', 'c', '1', 'd', '2', 'e', '1'] 

>>> list(((yield from a) for a in zip("abcde", itertools.cycle("12")))) 
['a', '1', None, 'b', '2', None, 'c', '1', None, 'd', '2', None, 'e', '1', None] 

Bằng cách nào? Giải thích khoa học là gì?

+1

@Alik, @Antti Haapala, vui lòng xóa dấu "trùng lặp". Câu hỏi này hỏi về hành vi sử dụng câu lệnh Python 'yield from'. Câu trả lời "trùng lặp" liên kết hỏi một câu hỏi tương tự về câu lệnh Python 'yield'. Hai câu này là khác biệt. Và vì 'năng suất từ' chỉ mới được thêm vào ngôn ngữ nên hoàn toàn tự nhiên là có những hành vi bất ngờ mới mà nó tạo ra. Điều này sẽ dẫn đến một số câu hỏi, trong khi chúng có thể trông giống như các câu hỏi về 'yield', không phải là những câu hỏi giống như câu hỏi về' yield'. –

+0

bạn vẫn đang tìm kiếm câu trả lời cho câu hỏi của mình? – Daniel

Trả lời

0

Giá trị của biểu thức yield fromNone. Thực tế là ví dụ thứ hai của bạn là một biểu thức máy phát có nghĩa là nó đã được ngầm ẩn từ trình vòng lặp, do đó nó cũng sẽ mang lại giá trị của biểu thức yield from. Xem this để có câu trả lời chi tiết hơn.

+0

Nó không giải thích sự khác biệt giữa đánh giá 'năng suất từ' trong hiểu thấu máy phát và hiểu danh sách mặc dù –

+0

khả năng đọc danh sách không có năng suất tiềm ẩn nên hành vi này không xảy ra. –

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