关于Python中的生成器

2024-04-26 08:02:40 发布

您现在位置:Python中文网/ 问答频道 /正文

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。为什么会这样?你知道吗


Tags: 内容returndefmaxnextprintyieldfib
1条回答
网友
1楼 · 发布于 2024-04-26 08:02:40

调用print(next(fib(6)))总是创建fib生成器的新实例,并从中生成一个值,然后丢弃它。你知道吗

另一方面:

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

创建生成器fib的实例f,并从中生成三个值。你知道吗

另外,使用max作为参数名是不受欢迎的,因为至少在本地范围内,您屏蔽了一个具有相同名称的内置函数。你知道吗

相关问题 更多 >