【发布时间】:2021-12-29 21:37:46
【问题描述】:
生成器函数:
def getPositiveCount():
n = 0
while n<100:
yield n
n+=1
上面的生成器函数在next(..) 方法中调用时没有达到预期的效果。为什么下一个调用总是返回 0?
print(next(getPositiveCount())) # prints 0
print(next(getPositiveCount())) # prints 0; should've printed 1
print(next(getPositiveCount())) # prints 0; should've printed 2
但是,如果我在循环中设置它就可以了:
for i in getPositiveCount():
print(i)
# prints 0,1,2 ... 99
这同样让我问,生成器函数是否与生成器表达式相同(通常使用范围、xrange 或类似的内置函数)?例如生成器表达式中的 next 调用完美运行:
squares = (n** 2 for n in range(5))
print(next(squares)) # 0
print(next(squares)) # 1
print(next(squares)) # 4
【问题讨论】:
-
旁注:做起来更简单
for n in range(100): yield n -
range(100)不占内存? @wjandrea -
它没有。你可能在想of Python 2。
-
@wjandrea 有什么办法可以看出它在python3中不占用内存,例如使用反射?
-
您可以阅读文档:Ranges "范围类型优于常规列表或元组的优点是范围对象将始终占用相同(少量)的内存,无论它表示的范围大小如何(因为它只存储
start、stop和step值,根据需要计算单个项目和子范围)。"
标签: python python-3.x generator