命名空間與作用域(2)

2022-08-14 20:51:12 字數 1990 閱讀 9653

一:命名空間:就是用來存放名字的記憶體空間

命名空間分為三大類:

1、內建命名空間:存放python直譯器提供的名字

生命週期:python直譯器啟動則產生,python直譯器關閉則銷毀

2、全域性命名空間:頂級的名字

生命週期:開始python程式則啟動,python程式執行完畢則銷毀

#示例

x = 1

y = 2

if true:

z = 3

while true:

bbb = 44

3.區域性命名空間:在函式內部定義的名字

生命週期:呼叫函式則產生,函式呼叫結束則會立即銷毀

def

f1(aaa):

#aaa=555

deff2():

ccc = 666f1(555)

二、名字訪問的優先順序:基於當前所在的位置向上查詢(區域性-》全域性-》內建)

#例1

# len=111

def f1():

# len=222

def f2():

# len=333

print(len)

f2()

f1()

#例2def f1():

print(len)

# f1()

len=111

# f1()

def foo():

len=333333

f1()

def bar():

len=44444

f1()

foo()

bar()

#例3:

aaa=333

def f1():

# print(aaa)

# print(len)

x=111

def ff1():

print("fff1===>x: ",x)

ff1()

def f2():

# print(aaa)

# print(len)

y=222

f1()

f2()

#例4:

len=111

def f1():

print(len)

def f2():

len=33333333333333333333

f1()

f2()

注:命名空間的巢狀關係是在函式定義階段掃瞄語法的時候生成的

x=111

def func():

print(x)

y=2222

func()

三、作用域

全域性作用域:內建+全域性命名空間中的名字

特點:全域性存活、全域性有效

區域性作用域:區域性命名空間空間的名字

特點:臨時存活,區域性有效

四、global、nonlocal

4.1 global:在函式內宣告名字是來自於全域性的

l=[1,2,3]

deffunc():

l[0]=111func()

print

(l)x=10

deffunc():

global

x x=20func()

print(x)

view code

4.2 nonlocal在函式內宣告名字是來自於外層函式的

x=333

deff1():

#x=111

deff2():

#global x

nonlocal x

x=222f2()

print

(x)f1()

view code

命名空間與作用域

命名空間即存放名字與物件對映 繫結關係的地方。對於x 3,python會申請記憶體空間存放物件3,然後將名字x與3的繫結關係存放於命名空間中,del x表示清除該繫結關係。在程式執行期間最多會存在三種命名空間 伴隨python直譯器的啟動 關閉而產生 因而是第乙個被載入的命名空間,用來存放一些內建的...

命名空間與作用域

定義 它是儲存作用域中變數的字典。乙個命名空間中不能有重名,但是不同的命名空間可以重名而沒有任何影響。分類 按照變數定義的位置,可以劃分為以下3類 local,區域性命名空間,記錄了函式中定義的所有變數,包括函式的入參 內部定義的區域性變數。使用locals 檢視區域性命名空間。返回的是字典 glo...

命名空間與作用域

有了命名空間之後,就可以在棧區中存放相同的名字,詳細的命名空間 存放的名字 內建命名空間存放的是python直譯器自帶的名字 例如 print input 生命週期 py直譯器啟動則產生,直譯器關閉則銷毀 存放的名字 只要不是內建的和函式內定義的名字,都是全域性命名空間 生命週期 python檔案執...