为什么在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

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

Related 相关文章

  1. 1

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

  2. 2

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

  3. 3

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

  4. 4

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

  5. 5

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

  6. 6

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

  7. 7

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

  8. 8

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

  9. 9

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

  10. 10

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

  11. 11

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

  12. 12

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

  13. 13

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

  14. 14

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

  15. 15

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

  16. 16

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

  17. 17

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

  18. 18

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

  19. 19

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

  20. 20

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

  21. 21

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

  22. 22

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

  23. 23

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

  24. 24

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

  25. 25

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

  26. 26

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

  27. 27

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

  28. 28

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

  29. 29

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

热门标签

归档