当前位置: 首页 > 面试题库 >

Python中的生成器和for循环

苏胤
2023-03-14
问题内容

所以我有一个生成器函数,看起来像这样。

def generator():
    while True:
        for x in range(3):
            for j in range(5):
                yield x

在加载此函数并多次调用“ next”之后,我希望它会产生值

0 0 0 0 0 1 1 1 1 1 2 2 2 2 2 0 0 0 0 0 ...

但是相反,它总是一直产生0。这是为什么?

>>> execfile("test.py")
>>> generator
<function generator at 0x10b6121b8>
>>> generator().next()
0
>>> generator().next()
0
>>> generator().next()
0
>>> generator().next()
0
>>> generator().next()
0
>>> generator().next()
0
>>> generator().next()
0

问题答案:

generator() 初始化新的生成器对象

In [4]: generator() is generator() # Creating 2 separate objects
Out[4]: False

然后generator().next()从新创建的生成器对象获取第一个值(在您的情况下为 0 )。

您应该致电generator一次:

In [5]: gen = generator() # Storing new generator object, will reuse it

In [6]: [gen.next() for _ in range(6)] # Get first 6 values for demonstration purposes
Out[6]: [0, 0, 0, 0, 0, 1]

注意
generator.next已从Python
3(PEP 3114)中删除-
改为使用该next函数:


In [7]: next(gen)
Out[7]: 1


 类似资料:
  • 问题内容: 在下面的示例代码中,是否真的需要counter = 0,还是有更好,更多的Python方法来访问循环计数器?我看到了一些与循环计数器有关的PEP,但它们要么被延迟要么被拒绝(PEP 212 和PEP 281)。 这是我的问题的简化示例。在我的实际应用程序中,这是通过图形完成的,整个菜单必须每帧重新绘制一次。但这以易于复制的简单文本方式进行了演示。 也许我还应该补充一点,我正在使用Pyt

  • 我正在编写一个计算e^x值的方法。我在python中实现它的方式如下。 这将很好地返回e^x的值。但是,当我尝试在c#中实现相同的方法时,它没有输出与python中相同的值。以下是c#中的实现。 起初,这段代码的输出是一个无穷大符号。为了解决这个问题,我只是减少了循环运行的次数。在c#中,循环只运行10次,代码的输出非常接近于python中循环运行100次的输出。我的问题是,在不同的编程语言中,两

  • 问题内容: 我想了解更多有关的信息,所以如果我错了,请纠正我。 迭代器是一个对象,该对象具有指向下一个对象的指针,并作为缓冲区或流(即,链表)读取。它们特别有效,因为它们所做的只是通过引用而不是使用索引来告诉您下一步是什么。 但是我仍然不明白为什么会发生以下行为: 经过迭代器()的第一个循环后,就好像它已被消耗并且留空,因此第二个循环()不输出任何内容。 但是,我从未为变量分配新值。 循环幕后到底

  • 如果我有一个数组: 我可以循环使用: 最后,为什么生成器没有方法“条目”,因为它们都是可迭代的。 如果以不同的方式访问它们,那么迭代的意义何在。

  • 问题内容: 我需要一个2D循环,其中第一个循环使用迭代器,第二个循环使用生成器,但是此简单函数无法正常工作,有人可以帮助检查吗? 不知道为什么?在此先感谢您的帮助。 问题答案: 既然您要澄清一下,我再说一遍。但实际上Ignacio的答案很好地总结了这一点:您只能在一个生成器上进行一次迭代。您示例中的代码尝试对其进行3次迭代,对于中的每个值一次。 要了解我的意思,请考虑以下简单示例: 当被调用时,它

  • 本文向大家介绍浅析Python中的for 循环,包括了浅析Python中的for 循环的使用技巧和注意事项,需要的朋友参考一下 Python for 和其他语言一样,也可以用来循环遍历对象,本文章向大家介绍Python for 循环的使用方法和实例,需要的朋友可与参考一下。 一个循环是一个结构,导致第一个程序要重复一定次数。重复不断循环的条件仍是如此。当条件变为假,循环结束和程序的控制传递给后面的