4

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

那么,Python 中的变量即使在for循环结束后仍然存在?

4

1 回答 1

8

在 Python 中,只有函数、模块和类定义的主体描述了作用域。其他控制结构没有。

关于这方面的一些基本信息在 Python 教程的类页面的Python 作用域和命名空间部分。一个重要的部分:

尽管范围是静态确定的,但它们是动态使用的。在执行期间的任何时候,至少有三个嵌套作用域的命名空间可以直接访问:

  • 首先搜索的最内层范围包含本地名称
  • 从最近的封闭范围开始搜索的任何封闭函数的范围包含非本地名称,但也包含非全局名称
  • 倒数第二个范围包含当前模块的全局名称
  • 最外层范围(最后搜索)是包含内置名称的命名空间
于 2012-04-16T00:51:04.940 回答