Python代码:
for i in xrange(10):
for j in xrange(5):
pass
# The for-loop ends, but i,j still live on
print i,j # 9, 4
C代码:
for(int i=0; i<=10; i++)
for(int =0; j<=5; j++)
;
// The for-loop ends, so i,j can't be accessed, right?
printf("%d, %d", i, j); // won't compile
那么,即使在for
循环结束后,Python中的变量仍会存在?
答案 0 :(得分:8)
只有函数,模块和类定义的主体在Python中描述范围。其他控制结构则没有。
有关此内容的一些基本信息位于Python教程的“类”页面的Python Scopes and Namespaces部分。一个重要的部分:
尽管范围是静态确定的,但它们是动态使用的。在执行期间的任何时候,至少有三个嵌套的作用域,其名称空间可以直接访问:
- 首先搜索的最里面的范围包含本地名称
- 从最近的封闭范围开始搜索的任何封闭函数的范围包含非本地名称,但也包含非全局名称
- 倒数第二个范围包含当前模块的全局名称
- 最外层范围(最后搜索)是包含内置名称的命名空间