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