所以我已经有一段时间在修补Python了,就在我开始认为自己掌握了东西的时候,我偶然发现了另一个我想念的基本概念。
具有以下基本的for(foreach)循环:
x = 15
for x in range(10):
continue
print(x)
我期望的“ x”值是 15 ,但我却得到了 9 。
C中相同的代码段返回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”?
答案 0 :(得分:3)
这是不一样的。在C中,您明确创建了一个新变量,而在Python中,您在for
范围内重用了该名称,最终覆盖了先前的值。
所以C等效实际上是:
#include <stdio.h>
int main(void)
{
int x = 15;
for (x = 0; x < 10; ++x)
{
continue;
}
--x; // To accommodate the different behavior of the range loop
printf("%d", x);
return 0;
}
不要忘记,在Python中,变量只是动态创建的字典中的条目,而在C中,它们是独立的静态项。