这里是一个简单的有界生成器。
如果我写:
def bounded_naturals(limit):
num = 1
while num <= limit:
yield num
num += 1
如果我写:
bn_gen = bounded_naturals(3)
bn_gen
将会是一个生成器对象,正如预期的一样。
但如果我写成:
(a, b, c) = bounded_naturals(3)
a
、b
和 c
的值将分别为 1、2 和 3。这让我感到奇怪,因为在代码中似乎没有要求生成器产生值的地方。Python 规范中是否有要求采用这种解释的地方呢?
更加引人注目的是,如果我写成:
bn_gen = (a, b, c) = bounded_naturals(3)
我同时得到了两种结果!bn_gen
将成为生成器对象,而 a
、b
和 c
则分别是 1、2 和 3。我应该怎样理解这是怎么回事呢?
最后,如果我写下:
(a, b) = bounded_naturals(3)
我遇到了一个问题:ValueError: too many values to unpack (expected 2).
如果编译器可以聪明地执行这些其他技巧,为什么它在这种情况下不够聪明,不仅要求生成器提供所需数量的元素?
Python文档中是否有解释所有这些的部分?
谢谢。
(a, b) = bounded_naturals(3)
在这个表达式中,你打算如何访问第三个元素? 注:该翻译假定“bounded_naturals”为专有名词,不予翻译。 - Rishabh Kumar