无限的序列号生成器不能在python中工作?

时间:2016-08-12 15:58:35

标签: python generator

我正在尝试实现一个可以生成无限数字的自然数生成器,我的代码:

def nature():
    s = 0
    while True:
        yield s
        s += 1

当我使用next(nature())时,我得到一个0的序列,为什么呢?以及如何解决它?

>>> next(nature())
0
>>> next(nature())
0
>>> next(nature())
0
>>> next(nature())
0

4 个答案:

答案 0 :(得分:6)

每次拨打nature()时,都会创建一个新的生成器。 而是这样做:

n = nature()
next(n)
next(n)
next(n)

答案 1 :(得分:1)

每次你回忆它时都会创建一个新的生成器;所以它从初始值开始。你想要的是:

from django.contrib.auth.mixins import LoginRequiredMixin

class MyView(LoginRequiredMixin, View):
    login_url = '/login/'
    redirect_field_name = 'redirect_to'

答案 2 :(得分:1)

您每次都在创建一个新生成器,尝试创建一次并将其传递给每个下一个调用

答案 3 :(得分:0)

不要一遍又一遍地对您的生成器进行实例化,例如,实例一并多次使用它:

def nature():
    s = 0
    while True:
        yield s
        s += 1

n = nature()
for i in range(10):
    print next(n)

print "Doing another stuff... Resuming the counting"

for i in range(10):
    print next(n)