Python,如果我更改循环内的值,为什么循环行为不会改变

时间:2019-02-21 04:35:55

标签: python

假设我写了一段代码:

for i in range(10):
    print(i)
    i=11

为什么循环现在不终止?

即使我这样做:

n=10
for i in range(n):
    print(i)
    n=0

这不会影响循环吗?

我只是想知道python如何管理循环变量?

4 个答案:

答案 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)

我们在for循环中提供的任何代码都被视为一个块,并且将从i = 0到9执行10次。

即使在for循环中分配了i = 11或任何其他变量x = 1,它也会打印我们分配的值10次。

请找到附件。

enter image description here

enter image description here