我正在尝试实现一个可以生成无限数字的自然数生成器,我的代码:
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
答案 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)