一、命名空間namespaces:存放名字的空間,是對棧區的劃分,有了名稱之後,就可以在棧區中存放相同的名字,詳細的,命名空間分為三種。
1.1 內建命名空間
存放的名字:存放的是python直譯器內內建的名字
存活週期:python直譯器啟動則產生。python直譯器關閉則銷毀。
1.2 全域性命名空間'''
'''
存放的名字:只要不是函式內定義,也不是內建的,剩下的都是全域性孔家名稱。
存活週期:python檔案執行則產生,python檔案執行完畢後銷毀。
1.3 區域性命名空間
存放的名字:在呼叫函式時,執行函式體**過程中產生的函式內的名字。
存活週期:在呼叫函式時存活,函式呼叫完畢後則銷毀。
1.4 命名空間的載入順序def
func()
: a =
111 b =
222func(
)
內建命名空間 > 全域性命名空間 > 區域性命名空間
1.5 銷毀順序
區域性命名空間 > 全域性命名空間 > 內建命名空間
如果當前在區域性命名空間
區域性命名空間–>全域性命名空間 -->內建命名空間
如果當前在全域性命名空間# 3最後是內建
#input = 333 # 2 在全域性
deffunc()
:#input = 444 # 1 # 先區域性
(input
) func(
)
全域性命名空間–>內建命名空間
#在內建
示範1:#input = 333 # 1先全域性
deffunc()
:input
=444
func(
(input
)
示範2:命名空間的「巢狀」關係是以函式定義階段為準,與呼叫位置無關x =
111def
func()
(x)func(
)def
func()
(x)x =
111func(
)#最終結果相同
示例3:函式巢狀定義x =
1def
func()
(x)def
foo():
x =222 func()
foo(
)
二、作用域–>作用範圍#input = 111 #3
deff1()
:#input = 222 #2
deff2()
:#input = 333 #1
(input
) f2(
)f1(
)
全域性作用域: 內建命名空間、全域性命名空間
1.全域性存活
2.全域性有效:被所有函式共享
區域性作用域:區域性命名空間的名字x =
111def
foo():
x =11print
(x,id
(x))
defbar()
: y =
222print
(x,id
(x))
foo(
)bar(
)
1.臨時存活
2.區域性有效:函式內有效
legbdef
foo(x)
:deff1(
):deff2()
(x)
三、global與nonlocal#built-in
#global
deff1()
:#enclosing
deff2()
:#enclosing
deff3()
:#local
pass
示範1:
示範2:如果在區域性想要修改全域性的名字對應的值(不可變型別),需要用global宣告。x =
111def
func()
: x =
222func(
(x)
示範3:x =
111def
func()
:global x # 宣告這個名字是全域性的名字,不要再造新的名字了
x =222func(
(x)
nonlocal(了解):修改函式外層函式包含的名字對應的值l =
[111
,222
]def
func()
:333
)func(
(l)
x =
0deff1(
):x =
11deff2(
):#global x
#nonlocal x
x =22 f2(
('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 內部定義的名字執行之後都存放於全域性命名空間函式內部...