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

Alc*_*ott 4 c python 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
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

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

agf*_*agf 8

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

有关此内容的一些基本信息,请参阅Python教程的Classes页面的Python Scopes和Namespaces部分.一个重要的部分:

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

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

  • 是的,legb规则,也来自"学习Python"一书:http://books.google.com.hk/books?id=1HxWGezDZcgC&pg=PA412&lpg=PA412&dq=python+LGB+scope&source=bl&ots=LjHh-Mfbr0&sig=JKatyA0rvni3wkjBRSN99iDyS5w&hl = EN&SA = X&EI = i26LT8r-EIiyiQfE2N2xBg&redir_esc = Y&HL = ZH-CN&的SourceID = cndr#v = onepage&q =蟒%20LGB%20scope&F =假 (2认同)