无限python生成器

无限python生成器,python,generator,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())

我学习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\u no()
生成生成器;您希望每次在同一个生成器上调用
next
,而不是反复打印相同的第一个元素

c = yes_no()

print(next(c))
print(next(c))
# etc.
也就是说,不需要单独的柜台;只需给出
yes
,然后给出
no
,然后重复

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

您需要初始化生成器,然后对已初始化的生成器对象调用
next

c = yes_or_no()
现在您需要在
c
上调用
next

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

在当前代码中
c=next(是或否())

  • yes\u或\u no()
    将初始化生成器,并在其上调用
    next
    将获得第一个
    yes
    ,您将该
    yes
    保存为name
    c

  • 在接下来的几行中,您只是在执行
    print(c)


而您的函数确实返回了一个生成器,并且其他人已经声明,您所需要做的就是使用循环或连续调用next对其进行迭代。Python为您提供了一个名为
itertools
的强大库来完成这项工作;它叫。以下是复制功能所需的全部代码:

def yes_no():
    return itertools.cycle(['yes', 'no'])
正如其他人所说,可以使用
next
或循环对生成器进行迭代

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

该函数不是一个生成器;函数的返回值被编辑为