为什么 for 循环不重置 range() 函数?

Why isn't for loop resetting the range() function?

我有一个代码:

x = 6

for y in range(x):
    print(y)
    x -= 2

它给出:0, 1, 2, 3, 4, 5

我错误地预测它会给出以下两个结果之一:

  1. 0, 0, 0 由于 x 从 6 到 4 再到 2 再到 0,因此只会打印 3 y。另外,据我了解,在每个循环之后,它会返回到 for 循环语句,从而完全重置 运行ge(),现在每个 y 都是 0。我 运行 代码在 PythonTutor 上,指针似乎也在每次循环后返回到循环语句。

  2. 0, 1, 2 由于 x 从 6 到 4 再到 2 再到 0,因此只会打印 3 y。我认为有可能虽然 y 具有原始 运行ge 的值(即 6),但它会受到每个新 x 的限制,因此只打印 3 y .

可能性 1 对我来说是最直观的(尽管是错误的),我不确定如何去理解为什么答案是这样的。

range(x) 生成的 range 实例在调用 range 时使用 x 的值。每次您需要范围中的新值时,它不会重复检查 x 的值。您的代码实际上与

相同
x = 6

for y in [0, 1, 2, 3, 4, 5]:
   print(y)
   x -= 2

您对 x 所做的任何操作都不会影响正在迭代的 range 对象。

range() 调用在循环开始时从 x 创建一个 range 对象。在此之后更改 x 对用于迭代的 range 对象没有影响。

如果您希望能够更改循环中的迭代次数,您可能需要查看使用 while

试试这个:

# Firstly you assign 6 to the variable x
x = 6 

# 'y' will now be assigned to the numbers [0, 1, 2, 3, 4, 5, 6] because the range is 'x' which is 6.

# by printing 'x' it will execute [0, 1, 2, 3, 4, 5, 6] but since x is 'x -2' which is the same as  '6 - 2'  it will print out the number 6 and -2 until it gets to the range which is -6. the output will be 6 numbers [6, 4, 2, 0, -2, -4] 


for y in range(x):
    print(x)
    x = x - 2

# i am showing you a way of making it give you your expected output [6, 4, 2, 0, -2, -4]