我知道我必须遗漏一些简单的东西,但我没有看到它.
如果我有这样的生成器表达式:
>>> serializer=(sn for sn in xrange(0,sys.maxint))
Run Code Online (Sandbox Code Playgroud)
我可以很容易地生成这样的单个整数:
>>> serializer.next()
0
>>> serializer.next()
1
>>> serializer.next()
2
Run Code Online (Sandbox Code Playgroud)
如果我写这样的生成器:
>>> def ser():
... for sn in xrange(0,100000):
... yield sn
Run Code Online (Sandbox Code Playgroud)
这不是bueno:
>>> ser().next()
0
>>> ser().next()
0
>>> ser().next()
0
Run Code Online (Sandbox Code Playgroud)
??? 我错过了什么?
Jef*_*ner 21
ser()创造发电机.因此,每次调用ser()它时都会向您发送一个新的生成器实例.您需要像表达式一样使用它:
serializer = ser()
serializer.next()
Run Code Online (Sandbox Code Playgroud)
考虑一下,如果它不能以这种方式工作,你只能使用该ser()函数一次,你永远不能重置它.另外,您可以更改ser函数以接受最大整数,并使您的程序更灵活.
def ser(n=sys.maxint):
for sn in xrange(0, n):
yield sn
Run Code Online (Sandbox Code Playgroud)
在第二个示例中,您将继续创建一个新实例,从新生成器开始.
g = ser()
g.next()
g.next()
Run Code Online (Sandbox Code Playgroud)
创建一次生成器并重用它.