【发布时间】:2019-04-20 17:52:37
【问题描述】:
所以我一直在修补 Python 有一段时间了,就在我开始认为我已经掌握了一些东西的时候,我偶然发现了另一个我错过的基本概念。所以..
拥有这个基本的 for(foreach) 循环:
x = 15
for x in range(10):
continue
print(x)
我预期的“x”值是 15,但结果却是 9。
C 中相同的代码 sn-p 返回 x 的原始值 - 15:
#include <stdio.h>
int main(void)
{
int x = 15;
for (int x = 0; x < 10; x++)
{
continue;
}
printf("%d", x);
return 0;
}
我似乎无法弄清楚变量范围是如何在这里工作的。 由于 x 是在 for 循环范围之外声明的,不应该在循环的生命周期内创建一个新的局部变量吗? 那么为什么 Python 版本会覆盖 'x' 呢?
【问题讨论】:
-
我不知道c,但是在python中,任何变量总是会取它分配的值
-
在继续查看会发生什么之前尝试添加打印语句
print(x)。 -
@Nathan 添加打印语句将打印 x 的每个值,从 0 到 9,但我不明白为什么它会覆盖 x 而不是创建新的局部变量,例如 C .
-
for循环不会在 Python 中创建新范围。有关范围规则,请参阅例如 stackoverflow.com/questions/291978/… -
@ThierryLathuille 谢谢!很棒的帖子,我应该早点找到的!