为什么Python中的变量比C中的寿命更长(范围更大)?

时间:2012-04-16 00:49:43

标签: python c scope

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中的变量仍会存在?

1 个答案:

答案 0 :(得分:8)

只有函数,模块和类定义的主体在Python中描述范围。其他控制结构则没有。

有关此内容的一些基本信息位于Python教程的“类”页面的Python Scopes and Namespaces部分。一个重要的部分:

  

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

     
      
  • 首先搜索的最里面的范围包含本地名称
  •   
  • 从最近的封闭范围开始搜索的任何封闭函数的范围包含非本地名称,但也包含非全局名称
  •   
  • 倒数第二个范围包含当前模块的全局名称
  •   
  • 最外层范围(最后搜索)是包含内置名称的命名空间
  •