为什么在for循环中更新Python生成器时,其行为会有所不同?

mk1123

我在玩Python 3.8中的以下代码:

a = range(10)
limits = (5, 3) # order of limits doesn't matter
a = (i for i in a if i > limit[0])
a = (i for i in a if i > limit[1])
print(list(a))

如评论中所述,在这种情况下,首先应用哪个限制并不重要。无论是limits = (5, 3)还是(3, 5)[6, 7, 8, 9]两种情况下最后一行的输出都是。但是,代码(似乎)无关紧要的重构不再是这种情况:

a = range(10)
limits = (5, 3) # order of limits matters now?
for limit in limits:
    a = (i for i in a if i > limit)
print(list(a))

使用重构,如果limits = (3, 5),则结果输出为[6, 7, 8, 9],但使用时limits = (5, 3),输出等于[4, 5, 6, 7, 8, 9]在这种情况下,似乎仅应用了最终过滤器;当我运行以下代码时:

a = range(10)
limits = (4, 3, 2, 1, 0)
for limit in limits:
    a = (i for i in a if i > limit)
print(list(a))

[1, 2, 3, 4, 5, 6, 7, 8, 9]是输出。有人可以解释为什么这种现象发生吗?

亚伯拉罕·编码

在重构版本中,limit变量的值在生成器生成时查找,而不是在生成生成器对象时查找

由于值生成仅发生在的最后一行list(a),因此此时的值limit与循环的最后一次迭代的值相同。

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为什么在for循环中更新Python生成器时,其行为会有所不同?

来自分类Dev

为什么在递增计数与递减计数时,for循环的行为会有所不同?

来自分类Dev

为什么使用默认构造函数构造std :: string对象时,其行为会有所不同?

来自分类Dev

为什么承诺在循环中会有所不同?

来自分类Dev

当类中的counter较大时,为什么java线程的行为会有所不同?

来自分类Dev

使用-all标志时,为什么pdfimages生成的图像会有所不同?

来自分类Dev

使用-all标志时,为什么pdfimages生成的图像会有所不同?

来自分类Dev

DbQuery在foreach循环中的行为有所不同。为什么?

来自分类Dev

DbQuery在foreach循环中的行为有所不同。为什么?

来自分类Dev

玩笑测试中循环中的Javascript行为会有所不同

来自分类Dev

生成器函数在列表和生成器表达式上的行为有所不同吗?

来自分类Dev

生成器函数在列表和生成器表达式上的行为有所不同吗?

来自分类Dev

为什么界面生成器和模拟器的大小有所不同?

来自分类Dev

当计数器在我的班级较大时,为什么Java线程的行为会有所不同?

来自分类Dev

为什么使用交叉元运算符时** 2和²的行为会有所不同?

来自分类Dev

提供通用类型与直接类型时,为什么Typescript映射元组类型的行为会有所不同?

来自分类Dev

在直接分配或从get-content检索数组时,为什么数组的行为会有所不同

来自分类Dev

为什么在使用ICustomTypeDescriptor时TypeDescriptor.GetProperties对于类型和对象的行为会有所不同

来自分类Dev

为什么在Dom对象中为其分配变量会有所不同

来自分类Dev

为什么在Dom对象中为其分配变量会有所不同

来自分类Dev

为什么以foreach调用时,ForEach-Object的行为会有所不同?

来自分类Dev

为什么对于相同但按比例缩放的数据,绘图的行为会有所不同?

来自分类Dev

为什么从函数调用Bash的“源”命令的行为会有所不同?

来自分类Dev

为什么for循环和forEach会有所不同?

来自分类Dev

为什么有时自己的敏捷状态会有所不同?

来自分类Dev

为什么分别编译和链接功能时性能会有所不同?

来自分类Dev

为什么在静态连接时Web套接字的延迟会有所不同?

来自分类Dev

为什么在静态连接时Web套接字的延迟会有所不同?

来自分类Dev

在For Each循环中从其中删除项目时,IEnumerables的行为有所不同

Related 相关文章

  1. 1

    为什么在for循环中更新Python生成器时,其行为会有所不同?

  2. 2

    为什么在递增计数与递减计数时,for循环的行为会有所不同?

  3. 3

    为什么使用默认构造函数构造std :: string对象时,其行为会有所不同?

  4. 4

    为什么承诺在循环中会有所不同?

  5. 5

    当类中的counter较大时,为什么java线程的行为会有所不同?

  6. 6

    使用-all标志时,为什么pdfimages生成的图像会有所不同?

  7. 7

    使用-all标志时,为什么pdfimages生成的图像会有所不同?

  8. 8

    DbQuery在foreach循环中的行为有所不同。为什么?

  9. 9

    DbQuery在foreach循环中的行为有所不同。为什么?

  10. 10

    玩笑测试中循环中的Javascript行为会有所不同

  11. 11

    生成器函数在列表和生成器表达式上的行为有所不同吗?

  12. 12

    生成器函数在列表和生成器表达式上的行为有所不同吗?

  13. 13

    为什么界面生成器和模拟器的大小有所不同?

  14. 14

    当计数器在我的班级较大时,为什么Java线程的行为会有所不同?

  15. 15

    为什么使用交叉元运算符时** 2和²的行为会有所不同?

  16. 16

    提供通用类型与直接类型时,为什么Typescript映射元组类型的行为会有所不同?

  17. 17

    在直接分配或从get-content检索数组时,为什么数组的行为会有所不同

  18. 18

    为什么在使用ICustomTypeDescriptor时TypeDescriptor.GetProperties对于类型和对象的行为会有所不同

  19. 19

    为什么在Dom对象中为其分配变量会有所不同

  20. 20

    为什么在Dom对象中为其分配变量会有所不同

  21. 21

    为什么以foreach调用时,ForEach-Object的行为会有所不同?

  22. 22

    为什么对于相同但按比例缩放的数据,绘图的行为会有所不同?

  23. 23

    为什么从函数调用Bash的“源”命令的行为会有所不同?

  24. 24

    为什么for循环和forEach会有所不同?

  25. 25

    为什么有时自己的敏捷状态会有所不同?

  26. 26

    为什么分别编译和链接功能时性能会有所不同?

  27. 27

    为什么在静态连接时Web套接字的延迟会有所不同?

  28. 28

    为什么在静态连接时Web套接字的延迟会有所不同?

  29. 29

    在For Each循环中从其中删除项目时,IEnumerables的行为有所不同

热门标签

归档