python之命名空間

2021-10-22 11:34:06 字數 2893 閱讀 2013

一、命名空間namespaces:存放名字的空間,是對棧區的劃分,有了名稱之後,就可以在棧區中存放相同的名字,詳細的,命名空間分為三種。

1.1 內建命名空間

存放的名字:存放的是python直譯器內內建的名字

存活週期:python直譯器啟動則產生。python直譯器關閉則銷毀。

'''

>>> print

'''

1.2 全域性命名空間

存放的名字:只要不是函式內定義,也不是內建的,剩下的都是全域性孔家名稱。

存活週期:python檔案執行則產生,python檔案執行完畢後銷毀。

1.3 區域性命名空間

存放的名字:在呼叫函式時,執行函式體**過程中產生的函式內的名字。

存活週期:在呼叫函式時存活,函式呼叫完畢後則銷毀。

def

func()

: a =

111 b =

222func(

)

1.4 命名空間的載入順序

內建命名空間 > 全域性命名空間 > 區域性命名空間

1.5 銷毀順序

區域性命名空間 > 全域性命名空間 > 內建命名空間

如果當前在區域性命名空間

區域性命名空間–>全域性命名空間 -->內建命名空間

# 3最後是內建

#input = 333 # 2 在全域性

deffunc()

:#input = 444 # 1 # 先區域性

print

(input

) func(

)

如果當前在全域性命名空間

全域性命名空間–>內建命名空間

#在內建

#input = 333   # 1先全域性

deffunc()

:input

=444

func(

)print

(input

)

示範1:

x =

111def

func()

:print

(x)func(

)def

func()

:print

(x)x =

111func(

)#最終結果相同

示範2:命名空間的「巢狀」關係是以函式定義階段為準,與呼叫位置無關

x =

1def

func()

:print

(x)def

foo():

x =222 func()

foo(

)

示例3:函式巢狀定義

#input = 111   #3

deff1()

:#input = 222 #2

deff2()

:#input = 333 #1

print

(input

) f2(

)f1(

)

二、作用域–>作用範圍

全域性作用域: 內建命名空間、全域性命名空間

1.全域性存活

2.全域性有效:被所有函式共享

x =

111def

foo():

x =11print

(x,id

(x))

defbar()

: y =

222print

(x,id

(x))

foo(

)bar(

)

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

1.臨時存活

2.區域性有效:函式內有效

def

foo(x)

:deff1(

):deff2()

:print

(x)

legb

#built-in

#global

deff1()

:#enclosing

deff2()

:#enclosing

deff3()

:#local

pass

三、global與nonlocal

示範1:

x =

111def

func()

: x =

222func(

)print

(x)

示範2:如果在區域性想要修改全域性的名字對應的值(不可變型別),需要用global宣告。

x =

111def

func()

:global x # 宣告這個名字是全域性的名字,不要再造新的名字了

x =222func(

)print

(x)

示範3:

l =

[111

,222

]def

func()

:333

)func(

)print

(l)

nonlocal(了解):修改函式外層函式包含的名字對應的值

x =

0deff1(

):x =

11deff2(

):#global x

#nonlocal x

x =22 f2(

)print

('f1內的x:'

,x)f1(

)

python之命名空間

建立乙個類就會建立乙個類的命名空間,用來儲存類中定義的所有名字,這些名字稱為類的屬性 而類的良好總屬性 資料屬性和函式屬性 其中類的資料屬性是共享給所有物件 print id g1.camp 引用的位址是一樣的 print id garen.camp 輸出結果為 其中類的函式屬性是繫結到所有物件 p...

Python命名空間總結 「命名空間之禪」

python中的命名空間,在使用點號.和不使用點號.兩種情況下使用變數名時,會有不同的處理方式。賦值語句 var value 僅僅是建立或改變當前作用域變數名,除非使用了global或者nonlocal關鍵字 引用語句 var 搜尋路徑如下 l local 在當前作用域下搜尋變數名var e 在所有...

python入門之命名空間

name tank 存放名字的空間 如果你想訪問乙個變數值,必須先訪問對應的命名空間,拿到名字和對應的記憶體位址的繫結關係 python提前給你的定義完的名字,就是存在內建命名空間存放於檔案級別的名字,就是全域性命名空間 if while for 內部定義的名字執行之後都存放於全域性命名空間函式內部...