python 作用域

python能够改变变量作用域的代码段是def、class、lamda.  ( 模块,类以及函数才会引入新的作用域 )

if/elif/else、try/except/finally、for/while 并不能涉及变量作用域的更改,也就是说他们的代码块中的变量,在外部也是可以访问的

变量搜索路径是:本地变量->全局变量

注意以下例子,跟js很像:

 

i = 0
def f():
  print i
  i = 0
f()

 

运行结果显示:UnboundLocalError: local variable 'i' referenced before assignment。

因为在函数 f() 中出现了变量 i=0,编译器会认为i属于局部变量(local),根据LEGB规则,先搜索local变量,则在 print i 语句时候,局部变量 i 还没有赋值,故抛出异常。

 

 

i = 0
def f():
  i += 1
  print i
f()
 
 

以上同样会报错,i += 1 等价于 i = i + 1,因为 x= 是一个定义变量的行为,则 i + 1 中的 i 实际上市未定义的

posted @ 2015-09-02 00:41  风沙星辰  阅读(173)  评论(0编辑  收藏  举报