1. 程式人生 > >(一)Python入門-5函數:10nonlocal-global-LEGB規則

(一)Python入門-5函數:10nonlocal-global-LEGB規則

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規則