为什么我需要先将生成器函数存储到变量中?

心理技术变态者

我正在探索在 python 中使用生成器,但我遇到了一个奇怪的问题。

以下代码怎么能按预期工作(例如,每次调用函数时都返回下一个斐波那契数):

def fibonacci():                                       
    current, previous = 0,1                             
    while True:                                         
        yield current
        current, previous = current + previous, current

fib = fibonacci()

for i in range(0,21):
    print(next(fib))

但是当我直接在 for 循环中调用该函数时,如下所示:

for i in range(0,21):
    print(next(fibonacci()))

它打印出 21 个零?

L3viathan

正如克里斯在他的评论中所说:

因为那样你会在每次迭代中创建新的生成器对象,一遍又一遍地获取第一个元素。

可以通过直接迭代它来避免将其分配给变量。这样你只创建一个生成器对象:

for n, i in zip(fibonacci(), range(0,21)):
    print(n)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为什么生成器函数生成Rc <T>需要大小特征?

来自分类Dev

为什么python生成器需要yield?

来自分类Dev

生成器函数的局部变量存储在Stack还是Heap中?

来自分类Dev

为什么我的生成器函数总是返回相同的值?

来自分类Dev

为什么我的生成器函数执行两次?

来自分类Dev

为什么在此电源集生成器中需要按位运算符?

来自分类Dev

为什么我的随机密码生成器生成了我需要的多个字符?

来自分类Dev

在异步生成器函数中是否需要等待?

来自分类Dev

界面生成器:为什么我的UIView透明?

来自分类Dev

为什么在将游标传递给StreamingHttpResponse时将其在生成器函数中关闭?

来自分类Dev

为什么JavaScript中的生成器函数在任何yield表达式之前停止?

来自分类Dev

在 Python 函数调用中创建生成器 - 为什么这样做?

来自分类Dev

为什么我不能在两次迭代中覆盖旧的生成器?

来自分类Dev

(为什么)我不能从生成器中抛出异常吗?

来自分类Dev

在变量中设置生成器函数的结果

来自分类Dev

为什么要减去vector :: size并先将其存储到变量中,而不返回不同的结果?

来自分类Dev

为什么在再次为生成器设置变量后为生成器设置变量?(这个案例不同于普通的生成器示例)

来自分类Dev

日期生成器到表变量

来自分类Java

为什么当我使用编辑器代码生成器时,eclipse会在构造函数中自动添加java super()方法?

来自分类Dev

为什么我需要 eval 在 makefile 函数中设置变量?

来自分类Dev

Kotlin:为什么我不能将函数存储在变量中?

来自分类Dev

为什么即使我没有在函数中点击yield关键字,为什么我仍然收到生成器

来自分类Dev

在此示例中,为什么使用生成器函数比填充和迭代数组要慢?

来自分类Dev

为什么在网址生成器中将“ +”添加到我的所有坐标中?

来自分类Dev

为什么我的随机颜色生成器的JS代码在浏览器中不起作用

来自分类Python

为什么生成器表达式需要大量内存?

来自分类Dev

Python:为什么要将生成器转换为列表需要很长时间

来自分类Dev

理解 Python 中的生成器函数

来自分类Dev

为什么我的随机字符串生成器生成的字符串太短?

Related 相关文章

  1. 1

    为什么生成器函数生成Rc <T>需要大小特征?

  2. 2

    为什么python生成器需要yield?

  3. 3

    生成器函数的局部变量存储在Stack还是Heap中?

  4. 4

    为什么我的生成器函数总是返回相同的值?

  5. 5

    为什么我的生成器函数执行两次?

  6. 6

    为什么在此电源集生成器中需要按位运算符?

  7. 7

    为什么我的随机密码生成器生成了我需要的多个字符?

  8. 8

    在异步生成器函数中是否需要等待?

  9. 9

    界面生成器:为什么我的UIView透明?

  10. 10

    为什么在将游标传递给StreamingHttpResponse时将其在生成器函数中关闭?

  11. 11

    为什么JavaScript中的生成器函数在任何yield表达式之前停止?

  12. 12

    在 Python 函数调用中创建生成器 - 为什么这样做?

  13. 13

    为什么我不能在两次迭代中覆盖旧的生成器?

  14. 14

    (为什么)我不能从生成器中抛出异常吗?

  15. 15

    在变量中设置生成器函数的结果

  16. 16

    为什么要减去vector :: size并先将其存储到变量中,而不返回不同的结果?

  17. 17

    为什么在再次为生成器设置变量后为生成器设置变量?(这个案例不同于普通的生成器示例)

  18. 18

    日期生成器到表变量

  19. 19

    为什么当我使用编辑器代码生成器时,eclipse会在构造函数中自动添加java super()方法?

  20. 20

    为什么我需要 eval 在 makefile 函数中设置变量?

  21. 21

    Kotlin:为什么我不能将函数存储在变量中?

  22. 22

    为什么即使我没有在函数中点击yield关键字,为什么我仍然收到生成器

  23. 23

    在此示例中,为什么使用生成器函数比填充和迭代数组要慢?

  24. 24

    为什么在网址生成器中将“ +”添加到我的所有坐标中?

  25. 25

    为什么我的随机颜色生成器的JS代码在浏览器中不起作用

  26. 26

    为什么生成器表达式需要大量内存?

  27. 27

    Python:为什么要将生成器转换为列表需要很长时间

  28. 28

    理解 Python 中的生成器函数

  29. 29

    为什么我的随机字符串生成器生成的字符串太短?

热门标签

归档