(一)Python入門-5函數:10nonlocal-global-LEGB規則
阿新 • • 發佈:2019-05-12
python cal -i 規則 python入門 closed 一個 -- rdquo
一:nonlocal關鍵字
nonlocal 用來聲明外層的局部變量。
global 用來聲明全局變量。
#測試nonlocal、global關鍵字的用法 a = 100 def outer(): b = 10 def inner(): nonlocal b #聲明外部函數的局部變量 print(‘inner:b‘,b) b = 20 #內部函數中修改了外部函數變量b的值 global a #聲明全局變量 a = 200 inner()print(‘outer:b‘,b) outer() print(‘a:‘,a)
運行結果:
inner:b 10
outer:b 20
a: 200
二:LEGB規則
Python在查找“名稱”時,是按照LEGB規則查找的: Local-->Enclosed-->Global-->Built in
Local 指的就是函數或者類的方法內部
Enclosed 指的是嵌套函數(一個函數包裹另一個函數,閉包)
Global 指的是模塊中的全局變量
Built in 指的是Python為自己保留的特殊名稱。
如果某個name映射在局部(local)命名空間中沒有找到,接下來就會在閉包作用域 (enclosed)進行搜索,如果閉包作用域也沒有找到,Python就會到全局(global)命名空 間中進行查找,最後會在內建(built-in)命名空間搜索 (如果一個名稱在所有命名空間 中都沒有找到,就會產生一個NameError)。
#測試LEGB str = "global" def outer(): #str = "outer" def inner(): #str = "inner" print(str) inner() outer()
(一)Python入門-5函數:10nonlocal-global-LEGB規則