28-高级特性之作用域(2)
1. 原理
L:local,局部作用域,即函數中定義的變量;
E:enclosing,嵌套的父級函數的局部作用域,即包含此函數的上級函數的局部作用域,但不是全局的;
G:global,全局變量,就是模塊級別定義的變量;
B:built-in,系統固定模塊里面的變量,比如int, bytearray等。
搜索變量的優先級順序依次是:局部作用域>外層作用域>當前模塊中的全局>python內置作用域,也就是LEGB。
2. 作用域產生的場景
- 會引入新的作用域:module,class,def
- 不會引入新的作用域:if,for,try--except
注意:如果在外部引用局部變量,本質已經變成“在外部定義或者引用了一個新的全局變量”,如:
x = 123 #全局G
def test_1():
x = 345 #局部變量x是L,屏蔽了作為G的x
print(x) #345test_1() #345
print(x, '\n') #123,這里的x是Gdef test_2():
y = 456 #局部變量y
print(y)test_2() #456
y = 'haozhang' #等價于創造了新的全局變量y
print(y) #haozhang
test_2() #456
在函數內部卻要訪問全局變量:用global
x = 1 def outfx():global x #global改變了G區變量print(x) #1x = 2 outfx() print(x) #2內部函數訪問嵌套的父函數的變量:用nonlocal
def outfx():x = 1 def infx():nonlocal x #nonlocal改變了E區變量x = 2print(x) #2infx()print(x) #2 outfx()3. 參考文獻:
http://blog.csdn.net/ldzhangyx/article/details/49475159
轉載于:https://www.cnblogs.com/LS1314/p/8504512.html
總結
以上是生活随笔為你收集整理的28-高级特性之作用域(2)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Phython 3 笔记2 —— 基础语
- 下一篇: 模块 xml