假设我写了一段代码:
for i in range(10):
print(i)
i=11
为什么循环现在不终止?
即使我这样做:
n=10
for i in range(n):
print(i)
n=0
这不会影响循环吗?
我只是想知道python如何管理循环变量?
答案 0 :(得分:4)
Python for
循环是基于迭代而非条件的。它们在到达StopIteration
时停止,而不是在某个布尔条件的值为False
时停止。
range
创建一个临时范围对象,该对象在迭代过程中无法更改。在range(10)
或range(n)
或其他名称之后,此对象完全独立于创建对象。
您可能希望这样的事情发生(C代码):
for (int i = 0; i < 10; ++i) {
printf("%d ", i);
i = 11;
}
这不是Python中for循环的工作方式。与此类似:
int range[10] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
for (int count = 0; count < 10; ++count) {
int i = range[count];
printf("%d ", i);
i = 11;
}
答案 1 :(得分:2)
range()
函数在给定的起始整数和终止整数之间生成整数,该整数通常用于用for循环进行迭代。
i
返回,而不是分配。
文档:https://docs.python.org/3/library/functions.html#func-range
答案 2 :(得分:2)
range()
函数返回要迭代的列表
示例for i in range(5)
等效于for i in [1,2,3,4,5]
for
循环在收到StopIteration
现在,在您的第一个方块中,
for i in range(10):
print(i)
i=11
i在打印后被分配给11,但是在分配之后,迭代完成,并且i被重新分配给下一个列表元素。
按预期的方式移动作业
for i in range(10):
i=11
print i
输出:
11
11
11
11
11
11
11
11
11
11
在第二个区块中:
n=10
for i in range(n):
print(i)
n=0
n是在range()
生成列表[1...10]
之后更新的,因此更新n无效
答案 3 :(得分:0)