Chúng ta không thể mang lại nhiều hơn một giá trị trong các chức năng của trình tạo python?Lợi nhuận nhiều giá trị
Ví dụ,
In [677]: def gen():
.....: for i in range(5):
.....: yield i, i+1
.....:
In [680]: k1, k2 = gen()
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-680-b21f6543a7e9> in <module>()
----> 1 k1, k2 = a()
ValueError: too many values to unpack
này hoạt động như sau:
In [678]: b = a()
In [679]: list(b)
Out[679]: [(0, 1), (1, 2), (2, 3), (3, 4), (4, 5)]
kết quả tương tự ngay cả khi tôi làm điều này:
In [692]: def a():
for i in range(5):
yield i
yield i+1
Cảm ơn.
Không phải vậy. Xem câu trả lời của Jon Clements. – Marcin
Vâng, ví dụ của tôi là tương tự, trong đó nó tiến bộ các máy phát điện bằng cách sử dụng một 'for'-loop. Tôi đồng ý rằng câu trả lời của Jon là công phu hơn và có một lời giải thích tốt hơn về những gì đang xảy ra. Tuy nhiên, tôi vẫn không hiểu câu trả lời của tôi. –
Chúng ta có thể tiếp tục tạo ra máy phát điện này không? Một cái gì đó như thế này 'g = gen(); def yield_g(): yield g.next(); k1, k2 = yield_g(); 'và do đó' danh sách (k1) 'sẽ cho' [0,1,2,3,4] 'và' danh sách (k2) '' [1,2,3,4,5 ] ' –