局部變量
- 定義在函數體內部的變量稱為局部變量
- 函數的形參也是局部變量
- 局部變量的作用范圍只在聲明該局部變量的函數體內
- 局部變量在函數調用時被創建,在函數調用完成后自動銷毀
全局變量
- 定義在函數體外,模塊內的變量稱為全局變量
- 全局變量在所有函數體內都可以進行訪問
- 全局變量在函數體內不能直接修改綁定關系
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語句的變量列表的變量名不能出現在此函數的參數列表里