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

标签 python

假设我写了一段代码:

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

为什么循环现在不终止?

即使我这样做了:

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

它不影响循环吗?

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

最佳答案

Python for 循环基于迭代,而不是条件。它们在到达 StopIteration 时停止,而不是在某个 bool 条件的计算结果为 False 时停止。

range 创建一个在迭代期间不能更改的临时范围对象。在 range(10)range(n) 或任何调用之后,此对象完全独立于用于创建它的对象。

您可能预料到会发生这样的事情(C 代码):

for (int i = 0; i < 10; ++i) {
    printf("%d ", i);
    i = 11;
}

这不是 for 循环在 Python 中的工作方式。它更类似于此:

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;
}

关于Python 为什么如果我更改循环内的值,循环行为不会改变,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54799322/

相关文章:

python - 使用 'word groups' 创建字典

python - 比较两个 pandas 系列的 float 接近相等?

python - Firestore 无法获取快照路径

python - 如何创建一个 python 脚本,以便在目录中的 csv 文件在过去 24 小时内未更新时发送电子邮件?

python - 我应该安装 'MySQL-Python' 连接器中的哪一个?

python - 在 Django admin 中验证 ManyToManyField 项的数量(使用中间模型)

python - 如何使查询 sql 数据库的 python 脚本更加内存有效?

python - 如何在 Python 的循环中更改迭代变量的值?

python - 获取 CSV 读取器/写入器对象使用的文件对象

python - NumPy 与 MATLAB