作用域:
- 指命名空間可直接訪問的python程序的文本區域,這里的 ‘可直接訪問’ 意味着:對名稱的引用(非限定),會嘗試在命名空間中查找名稱;
- L:local,局部作用域,即函數中定義的變量;
- E:enclosing,嵌套的父級函數的局部作用域,即包含此函數的上級函數的局部作用域,但不是全局的;
- G:globa,全局變量,就是模塊級別定義的變量;
- B:built-in,內建作用域,系統固定模塊里面的變量,比如:int,bytearray等
-
搜索變量的優先級順序:LEGB,即:局部作用域 > 外層嵌套作用域 > 當前模塊的全局作用域 > python內置作用域
下面,以一個小實例演示:
1 L = [1,2,3] 2 3 def f1(lst): 4 global L 5 L = lst #這是在做什么?可以么? 6 7 def f2(lst): 8 L += lst #這是在做什么?可以么? 9 10 def f3(lst): 11 L.extend(lst) #這是在做什么?可以么? 12 13 try: 14 f1([4,5,6]) 15 print(L) #[4,5,6] 16 print() 17 except: 18 print('f1執行有誤') 19 20 try: 21 f2([4,5,6]) 22 print(L) #f2執行有誤,報錯,L只在函數內部定義 23 print() 24 except UnboundLocalError: 25 print('f2執行有誤') 26 27 try: 28 f3([4,5,6]) 29 print(L) #優先級,當函數內部找不到L時,向上尋找L 30 print() 31 except: 32 print('f3執行有誤')