Python学习笔记010——作用域
1 作用域的分類
全局變量:在文件中所有函數外部創建的變量,整個文件可見
局部變量:在函數、類等內部創建的變量且僅用在函數內部的變量;
? ? ? ? ? ? ? ? ? 函數的形參也是局部變量。
注:所有的變量必須是先創建,再使用。
運行該段代碼會報錯
Traceback (most recent call last):File "test.py", line 6, in <module>func()File "test.py", line 3, in funcx += 1 UnboundLocalError: local variable 'x' referenced before assignment報錯原因:變量x先使用后定義。
當一個變量已經存在于局部變量時,如果提前調用相同“名字”的變量,系統只會在局部中找該變量,但是,變量確實后定義的,就會報錯。
2 四個作用域LEGB
2.1?嵌套函數(閉包) 作用域 Enclosing
也可稱為非局部-非全局變量,必須在嵌套函數中使用。
當出現多個函數嵌套時,(內)二層沒有找到該已定義變量,則繼續在(內)三層中找,直到找到為準,當最后一層函數內仍沒有找到該已定義變量,則直接報錯
例
var = 100 def func1():nonlocal varvar = 200print(var) func1()輸出
File "test.py", line 3nonlocal var SyntaxError: no binding for nonlocal 'var' found?
如兩個嵌套函數,內層函數可能搜索外層函數的命名空間,但外層函數的命名空間對內層函數而言既非局部也非全局。
var = 100 def func1():var = 200print("func1:", var)def func2():nonlocal varvar += 1print("func2:", var)func2() print("func1 執行 func2 之后", var) func1()輸出
func1 執行 func2 之后 100 func1: 200 func2: 201該變量和全局變量一樣,不能在形參中出現
2.2?內置作用域 Built-in
Python __builtin__ 模塊, 包含了內建的變量/關鍵字等。
如內置變量和函數。?如?print??
2.3全局變量global
全局變量的標志是global
def func():global yy =100return yprint(func())輸出結果:100
def func():global yreturn yprint(func())輸出結果
Traceback (most recent call last):File "test.py", line 5, in <module>print(func())File "test.py", line 3, in funcreturn y NameError: name 'y' is not defined參數y沒有被定義。
global只是聲明了一個變量是全局變量,但是沒有對該函數定義,也即沒有對該變量進行任何綁定。
?
def func(x):global xx = 20print(x) func(20)輸出結果
File "test.py", line 2global x SyntaxError: name 'x' is parameter and global形參變量不能強制轉為全局變量
3?作用域搜索順序
作用域搜索順序遵循 LEGB 規則 搜, Local -> Enclosing -> Global ->Built-in 即: L>E>G>B。
本地 ?閉包本地 ? 全局 ? 內置變量
局部 ?閉包 ?全局 ?內置
?
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀總結
以上是生活随笔為你收集整理的Python学习笔记010——作用域的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: XFire 应用
- 下一篇: MySQL Group Replicat