生成器没有长度,它们毕竟不是集合。
生成器是 具有内部状态 (和精美语法)的 函数
。您可以反复调用它们以获得值序列,因此可以循环使用它们。但是它们不包含任何元素,因此,要求生成器的长度就像要求函数的长度一样。
如果Python中的函数是对象,是否不能将长度分配给该对象的变量,新生成器可以访问该变量?
函数是对象,但是您不能为其分配新的属性。原因可能是使这样的基本对象尽可能高效。
但是,您可以简单地
(generator, length)从函数中返回对或将生成器包装在一个简单的对象中,如下所示:
class GeneratorLen(object): def __init__(self, gen, length): self.gen = gen self.length = length def __len__(self): return self.length def __iter__(self): return self.geng = some_generator()h = GeneratorLen(g, 1)print len(h), list(h)



