gpt4 book ai didi

python - 生成器表达式 vs yield : Why isn't 'next()' working?

转载 作者:太空狗 更新时间:2023-10-29 21:13:15 26 4
gpt4 key购买 nike

我知道我一定遗漏了一些简单的东西,但我没有看到。

如果我有这样的生成器表达式:

>>> serializer=(sn for sn in xrange(0,sys.maxint))

我可以像这样轻松生成单个整数:

>>> serializer.next()
0
>>> serializer.next()
1
>>> serializer.next()
2

如果我这样写一个生成器:

>>> def ser():
... for sn in xrange(0,100000):
... yield sn

这不是布埃诺:

>>> ser().next()
0
>>> ser().next()
0
>>> ser().next()
0

???我错过了什么???

最佳答案

ser() 创建生成器。因此,每次调用 ser() 时,它都会向您发送一个新的生成器实例。您需要像表达式一样使用它:

serializer = ser()
serializer.next()

考虑一下,如果它没有以这种方式工作,您只能使用一次 ser() 函数,并且永远无法重置它。另外,您可以更改 ser 函数以接受最大整数,并使您的程序更加灵活。

def ser(n=sys.maxint):
for sn in xrange(0, n):
yield sn

关于python - 生成器表达式 vs yield : Why isn't 'next()' working?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10958771/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com