python3 之 變量作用域詳解


作用域

  •  指命名空間可直接訪問的python程序的文本區域,這里的 ‘可直接訪問’ 意味着:對名稱的引用(非限定),會嘗試在命名空間中查找名稱;
    1. L:local,局部作用域,即函數中定義的變量;
    2. E:enclosing,嵌套的父級函數的局部作用域,即包含此函數的上級函數的局部作用域,但不是全局的;
    3. G:globa,全局變量,就是模塊級別定義的變量;
    4. 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執行有誤')

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM