zhcj66 发表于 2023-7-20 13:47

[已解决] python生成器一段代码执行过程疑问

本帖最后由 zhcj66 于 2023-7-20 15:29 编辑

下面的这段代码,生成器是如何使用的?没有理解怎么运算的def fibon(n):
    a = b = 1
    for i in range(n):
      yield a
      a, b = b, a + b

# 引用函数
for x in fibon(10):
    print(x , end = ' ')

zhuxiangyu1024 发表于 2023-7-20 14:01

拿yieldpython百度就行了,讲得比论坛清楚多了。

灿烂的小居 发表于 2023-7-20 14:18

python之生成器
参考:https://blog.csdn.net/weixin_55772194/article/details/123153688

grekevin 发表于 2023-7-20 14:28

https://pythontutor.com/python-debugger.html#mode=edit仔细看看执行过程

zhcj66 发表于 2023-7-20 15:15

感谢大家解答

Hetwen 发表于 2023-7-20 15:22

这段代码是一个斐波那契数列的生成器函数。它通过yield关键字返回斐波那契数列的前n个数字。在函数内部,a和b都被初始化为1,然后通过循环生成斐波那契数列。在每次循环中,使用yield关键字返回当前的a值,并用b更新a和b的值。

在代码的最后,我们使用for循环来迭代生成器函数并打印出斐波那契数列的前10个数字。通过设置end参数为' ',我们将数字之间的输出分隔符设置为空格。

运行这段代码将输出斐波那契数列的前10个数字:1 1 2 3 5 8 13 21 34 55

zhcj66 发表于 2023-7-20 15:28

Hetwen 发表于 2023-7-20 15:22
这段代码是一个斐波那契数列的生成器函数。它通过yield关键字返回斐波那契数列的前n个数字。在函数内部,a ...

讲解的很透彻谢谢

Vvvvvoid 发表于 2023-7-20 15:52

这段代码是一个用生成器实现的斐波那契数列生成器。斐波那契数列是一个经典的数学数列,从第3项开始,每一项都是前两项之和。通常,斐波那契数列的前几项为:1, 1, 2, 3, 5, 8, 13, 21, 34, 55, ...。

现在,我们来解释代码的功能和工作原理:

1. 定义`fibon(n)`函数:
   - 这个函数接受一个参数 `n`,表示生成斐波那契数列的长度。
   - 在函数内部,`a`和`b`都被初始化为1,这是斐波那契数列的前两项。

2. 使用 `yield` 语句:
   - `yield` 是一个关键字,用于定义生成器函数。当函数执行到 `yield` 语句时,它会返回一个值,并且函数的状态会被暂停,下次调用时从暂停的地方继续执行。
   - 在这个代码中,`yield a` 表示每次生成器函数被调用时,会产生当前斐波那契数列的值 `a`。

3. 使用 `for` 循环调用生成器函数:
   - `for x in fibon(10):` 这行代码会调用 `fibon` 函数,并用生成的斐波那契数列中的每个元素来迭代 `for` 循环。
   - `fibon(10)` 会生成一个长度为 10 的斐波那契数列。

4. 输出结果:
   - `print(x , end = ' ')` 这行代码会将每个生成的斐波那契数列元素 `x` 打印在一行上,末尾不换行,使用空格分隔。

最终,当代码运行时,它将生成斐波那契数列的前10个元素,并打印在一行上,结果类似于:`1 1 2 3 5 8 13 21 34 55`。

zhcj66 发表于 2023-7-21 08:29

Vvvvvoid 发表于 2023-7-20 15:52
这段代码是一个用生成器实现的斐波那契数列生成器。斐波那契数列是一个经典的数学数列,从第3项开始,每一 ...

a, b = b, a + b
这一行的目的是什么,不理解这里

lbbas 发表于 2023-7-21 08:52

zhcj66 发表于 2023-7-21 08:29
a, b = b, a + b
这一行的目的是什么,不理解这里


a = b
b=a+b

页: [1] 2
查看完整版本: [已解决] python生成器一段代码执行过程疑问