python3的全域性變數和區域性變數
阿新 • • 發佈:2019-02-06
區域性變數
- 定義在函式體內部的變數稱為區域性變數
- 函式的形參也是區域性變數
- 區域性變數的作用範圍只在宣告該區域性變數的函式體內
- 區域性變數在函式呼叫時被建立,在函式呼叫完成後自動銷燬
全域性變數
- 定義在函式體外,模組內的變數稱為全域性變數
- 全域性變數在所有函式體內都可以進行訪問
- 全域性變數在函式體內不能直接修改繫結關係
a = 100
def test():
a = 50
print(a)
test()
print(a)
輸出結果:
50
100
python3的作用域
作用域也叫名稱空間,是訪問時查詢變數的範圍空間
python3有四個作用域
作用域 | 英文解釋 | 英文簡寫 |
區域性作用域(函式內) | Local(function) | L |
外部巢狀函式作用域 | Enclosing function locals | E |
函式定義所在模組作用域 | Global(module) | G |
python內建模組的作用域 | Bui | B |
當訪問一個變數的時候,變數查詢順序是先查詢本地變數,然後是包裹此函式外部的函式內的變數,之後是全域性變數,最後是內建作用域內的變數 。
在預設情況下,變數名賦值會在當前作用域內建立變數和修改變數。
v = 100 # 全域性作用域 def fun1(): v = 200 # 外部巢狀函式作用域 print('fun1.v=', v) def fun2(): v = 300 # 區域性作用域 print('fun2.v=', v) print(max) # max函式都沒有建立,在內建函式作用域中,只讀,不能改變 # 可以在其餘三個作用域重新建立。 fun2() fun1() print("全域性變數.v=", v) print(max) # max變數定義在內建模組的作用域,是解釋執行器提前定義好的
global關鍵字
作用
宣告一個或多個變數,這些變數的作用域為模組級的作用域的變數,即全域性變數
將賦值變數對映到模組檔案內部的作用域
a = 10
def test():
global a
a = 5
print(a)
test()
print(a)
輸出結果:
5
5
說明:
全域性變數如果要在函式內部被賦值,則必須經過全域性宣告,否則會被認為是區域性變數
不能先宣告區域性變數,再用global宣告為全域性變數
global變數列表裡的變數名不能出現在次作用域內的形參列表
nonlocal語句
nonlocal宣告的變數的作用域是外部巢狀函式作用域
def test():
a = 10
def test2():
nonlocal a
a = 5
print(a)
test2()
print(a)
test()
說明:
nonlocal語句只能在被巢狀函式內部進行使用
訪問nonlocal變數將對外部巢狀函式作用域內的變數進行操作
當有兩層或兩層以上函式巢狀時,訪問nonlocal變數只對最近一層的變數進行操作
nonlocal語句的變數列表的變數名不能出現在此函式的引數列表裡