繁体   English   中英

无限python发生器

[英]Infinite python generator

我学习 python 和编程的时间不长。 所以你可能会觉得我的问题很傻。 我正在审查生成器并尝试无限地生成“是”、“否”以理解这个概念。

我已经尝试过这段代码,但每次都“是”

def yes_or_no():
    answer = ["yes","no"]
    i=0
    while True:
        if i >=2:
            i=0
        yield answer[i]
        i+=1

c=next(yes_or_no())

print(c)
print(c)
print(c)
print(c)

yes_no()产生生成器; 您希望每次都在同一个生成器上调用next ,而不是一遍又一遍地打印相同的第一个元素。

c = yes_no()

print(next(c))
print(next(c))
# etc.

也就是说,不需要单独的计数器; 只是 yield yes ,然后 yield no ,然后重复。

def yes_or_no():
    while True:
        yield "yes"
        yield "no"

您需要初始化生成器,然后在初始化的生成器 object 上调用next

c = yes_or_no()

现在您需要在c上调用next

print(next(c))
print(next(c))

在您当前的代码c=next(yes_or_no())

  • yes_or_no()将初始化生成器并调用next将得到第一个yes并且您将yes保存为名称c

  • 在接下来的几行中,您只是在执行print(c)时打印c引用的相同yes

虽然您的 function 确实返回了一个生成器,并且其他人已经说过,您需要做的就是使用循环对其进行迭代或连续调用 next 。 Python 为您提供了一个名为itertools的出色库来执行此操作; 它被称为itertools.cycle 这是复制功能所需的所有代码:

def yes_no():
    return itertools.cycle(['yes', 'no'])

就像其他人所说的那样,可以使用next或循环来迭代生成器。

>>> c = yes_no()
>>> next(c) 
'yes'
>>> next(c) 
'no'
...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM