为什么 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
我错误地预测它会给出以下两个结果之一:
0, 0, 0
由于 x
从 6 到 4 再到 2 再到 0,因此只会打印 3 y
。另外,据我了解,在每个循环之后,它会返回到 for 循环语句,从而完全重置 运行ge(),现在每个 y
都是 0。我 运行 代码在 PythonTutor 上,指针似乎也在每次循环后返回到循环语句。
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]
我有一个代码:
x = 6
for y in range(x):
print(y)
x -= 2
它给出:0, 1, 2, 3, 4, 5
我错误地预测它会给出以下两个结果之一:
0, 0, 0
由于x
从 6 到 4 再到 2 再到 0,因此只会打印 3y
。另外,据我了解,在每个循环之后,它会返回到 for 循环语句,从而完全重置 运行ge(),现在每个y
都是 0。我 运行 代码在 PythonTutor 上,指针似乎也在每次循环后返回到循环语句。0, 1, 2
由于x
从 6 到 4 再到 2 再到 0,因此只会打印 3y
。我认为有可能虽然 y 具有原始 运行ge 的值(即 6),但它会受到每个新x
的限制,因此只打印 3y
.
可能性 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]