【问题标题】:About generator in Python [duplicate]关于 Python 中的生成器 [重复]
【发布时间】:2017-05-30 10:49:18
【问题描述】:
def fib(max):
    n, a, b = 0, 0, 1
    while n < max:
        yield b
        a, b = b, a + b
        n = n + 1     
    return 'done'

print(next(fib(6)))
print(next(fib(6)))
print(next(fib(6)))

结果是1,1,1。 但是,如果我将print() 中的内容更改如下:

f = fib(6)
print(next(f))
print(next(f))
print(next(f))

结果将是1, 1, 2。为什么会这样?

【问题讨论】:

  • 请修正缩进。
  • 请张贴实际缩进?
  • 您每次都创建新的生成器。您确实看到了这种差异,不是吗?
  • 您可能还想删除退货声明后的“完成”...
  • @Rawing 感谢您的建议。感谢 Jim 已经帮助我改进了我的问题。下次我会注意的:)

标签: python python-3.x generator


【解决方案1】:

调用print(next(fib(6))) 总是会创建fib 生成器的新实例并从中产生一个值,然后您将其丢弃。

另一方面:

f = fib(6)
print(next(f))
print(next(f))
print(next(f))

创建生成器fib 的实例f 并从中生成三个值。

此外,使用max 作为参数名称是令人不悦的,因为至少在本地范围内,您正在屏蔽具有相同名称的内置函数。

【讨论】:

    猜你喜欢
    • 2017-08-03
    • 2021-12-28
    • 1970-01-01
    • 2014-01-06
    • 2020-07-04
    • 2016-04-20
    • 2013-04-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多