__sizeof__()不按照您的想法去做。该方法返回给定对象的内部大小(以字节为单位),而不是生成器将要返回的项目数。
Python无法事先知道生成器的大小。以下面的无限生成器为例(例如,有更好的方法来创建计数器):
def count(): count = 0 while True: yield count count += 1
那个发电机是无止境的。没有可分配的大小。但是生成器对象本身占用内存:
>>> count.__sizeof__()88
通常,
__sizeof__()您通常不会调用该
sys.getsizeof()函数,而这会增加垃圾回收器的开销。
如果您 知道 生成器将是有限的,并且 必须 知道它会返回多少个项目,请使用:
sum(1 for item in generator)
但请注意,这会使发电机 耗尽 。



