1. 程式人生 > >名稱空間和作用域

名稱空間和作用域

bsp 正是 enc 解釋 函數 -s osi 全局變量 函數定義

一 名稱空間

一 定義

名稱空間:存放名字的地方,三種名稱空間

(x=1,1存放於內存中,那名字x存放在哪裏呢?名稱空間正是存放名字x與1綁定關系的地方)

二 名稱空間的加載順序

python test.py
#1、python解釋器先啟動,因而首先加載的是:內置名稱空間
#2、執行test.py文件,然後以文件為基礎,加載全局名稱空間
#3、在執行文件的過程中如果調用函數,則臨時產生局部名稱空間

三 名字的查找順序

局部名稱空間--->全局名稱空間--->內置名稱空間

#需要註意的是:在全局無法查看局部的,在局部可以查看全局的,如下示例

# max=1
def f1():
    
# max=2 def f2(): # max=3 print(max) f2() f1() print(max)

二 作用域

一 作用域即範圍
- 全局範圍(內置名稱空間與全局名稱空間屬於該範圍):全局存活,全局有效
- 局部範圍(局部名稱空間屬於該範圍):臨時存活,局部有效

二 作用域關系

作用域關系是在函數定義階段就已經固定的,與函數的調用位置無關,如下

x=1
def f1():
    def f2():
        print(x)
    return f2
x=100
def f3(func):
    x=2
    func()
x
=10000 f3(f1())

三 查看作用域:globals(),locals()

LEGB 代表名字查找順序: locals -> enclosing function -> globals -> __builtins__
locals 是函數內的名字空間,包括局部變量和形參
enclosing 外部嵌套函數的名字空間(閉包中常見)
globals 全局變量,函數定義所在模塊的名字空間
builtins 內置模塊的名字空間

三 global和nonlocal關鍵字

global

global表示. 不再使用局部作用域中的內容了. 而改用全局作用域中的變量.

nonlocal

nonlocal表示在局部作用域中, 調用父級命名空間中的變量.

名稱空間和作用域