河清驰轩 2022-12-13 12:37 采纳率: 50%
浏览 14
已结题

函数在使用yield迭代时返回结果不一样

求解答 迭代器问题
函数在使用迭代时返回结果不一样


# -*- coding:utf8 -*-
year = 0


def ri_qi():
    global year

    while True:
        for month in range(1, 13):
            for day in range(1, 31):
                yield year, month, day
        year += 1


for i in range(5):
    print(next(ri_qi()))

返回结果入下,发现没有迭代走

E:\python文件3.8\venv\Scripts\python.exe E:/python文件3.8/日期变化.py
(0, 1, 1)
(0, 1, 1)
(0, 1, 1)
(0, 1, 1)
(0, 1, 1)

换成如下代码

# -*- coding:utf8 -*-
year = 0


def ri_qi():
    global year

    while True:
        for month in range(1, 13):
            for day in range(1, 31):
                yield year, month, day
        year += 1


a = ri_qi()
for i in range(5):
    print(next(a))

运行结果如下

E:\python文件3.8\venv\Scripts\python.exe E:/python文件3.8/日期变化.py
(0, 1, 1)
(0, 1, 2)
(0, 1, 3)
(0, 1, 4)
(0, 1, 5)

感觉代码应该没有区别,问什么结果不一样。求解答。

  • 写回答

1条回答 默认 最新

  • 谷雨睡不醒 2022-12-13 13:42
    关注

    a = ri_qi()是把一个生成器叫做a
    然后每次对这个a调用next()
    但是如果你直接next(ri_qi())就是每次生成一个新的生成器那自然每次输出的都是初始值

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 12月21日
  • 已采纳回答 12月13日
  • 创建了问题 12月13日

悬赏问题

  • ¥20 wireshark抓不到vlan
  • ¥20 关于#stm32#的问题:需要指导自动酸碱滴定仪的原理图程序代码及仿真
  • ¥20 设计一款异域新娘的视频相亲软件需要哪些技术支持
  • ¥15 stata安慰剂检验作图但是真实值不出现在图上
  • ¥15 c程序不知道为什么得不到结果
  • ¥40 复杂的限制性的商函数处理
  • ¥15 程序不包含适用于入口点的静态Main方法
  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来