命名空間:存放名字的地方,是對棧區的劃分,有了命名空間之後,就可以在棧區中存放相同的名字。
**存放的名字:**存放python直譯器內建的名字(例如,print、input)
>>> print
>>> input
**存活週期:**python直譯器啟動則產生,python直譯器關閉則銷毀
**存放的名字:**只要不是函式內定義、也不是內建的,剩下的都是全域性命名空間的名字
**存活週期:**python檔案執行則產生,python檔案執行完畢後銷毀
import os #os是全域性
x=10
#x是全域性
if x >13:
y=20#y是全域性
if xz=
30#z是全域性
====
====
====
====
====
==# func=函式的記憶體位址
deffunc()
:#func全域性
a=111 b=
222class
foo:
#foo全域性
pass
**存放的名字:**在呼叫函式時,執行函式體**過程中產生的函式內的名字
**存活週期:**在呼叫函式時存活,函式呼叫完畢後則銷毀。
a=
1#全域性名稱b=2
#全域性名稱
deffunc
(a,b)
:#括號中的a,b就是區域性名稱
print
(a,b)
func(10,
1)#==>10 1
內建命名空間》全域性命名空間》區域性命名空間
區域性命名空間》全域性命名空間》內建命名空間
示範1
def
func()
:print
(x)x=
111func(
)#==>111
示範2:命名空間的"巢狀"關係是以函式定義階段為準,與呼叫位置無關
x=
1def
func()
:print
(x)def
foo():
x=222 func(
)foo(
)#==>1
示範3:函式巢狀定義
input
=111
deff1()
:deff2(
):input
=333
print
(input
)input
=222
f2()f1(
)#==>333
示範4:
x=
111def
func()
:print
(x)#函式func在執行到print時先查詢函式內是否有x,查到發現有,但是是在print之後,(變數得先定義後引用)所以會報錯
x=222func(
)
全域性作用域:內建命名空間、全域性命名空間
#全域性存活
#全域性有效:被所有函式共享
例項:
x=
111def
foo():
print
(x,id
(x))
defbar()
:print
(x,id
(x))
foo(
)bar(
)print
(x,id
(x))
#執行結果:
111140723555909904
111140723555909904
111140723555909904
區域性作用域:區域性命名空間的名字
#臨時存活
#區域性有效:函式內有效
global宣告時全域性名稱
示範1:如果在區域性想要修改全域性的名字對應的值(不可變型別),需要用global
x=
111def
func()
:global x # 宣告x這個名字是全域性的名字,不要再造新的名字了
x=222func(
)print
(x,id
(x))
#執行結果
222140723555913456
示範2:如果在區域性想要改全域性的可變型別的名字裡的值,不需要global
l=
[111
,222
]def
func()
:333
)func(
)print
(l)#執行結果
[111
,222
,333
]
不可變型別:
x=
0deff1(
):x=
11deff2(
):nonlocal x
x=22 f2(
)print
('f1內的x:'
,x)f1(
)#執行結果f1內的x: 22
可變型別:
deff1(
):x=
deff2()
:1111
) f2(
)print
('f1內的x:'
,x)f1(
)#執行結果
f1內的x: [
1111
]
Python 命名空間與作用域
2.作用域 作用範圍 存放名字的地方,是對棧區的劃分,有了命名空間之後,就可以在棧區中存放相同的名字,詳細的,命名空間 存放的名字 存放的python直譯器內建的名字 存活週期 python直譯器啟動則產生,python直譯器關閉則銷毀 print in function print input i...
Python命名空間與作用域
作用域global與nonlocal 總結作用 命名空間可以使棧區中存放相同的名字,從而解決命名衝突 命名空間分為三種 內建命名空間 全域性命名空間 區域性命名空間 變數名a a 1 函式名func deffunc pass 類名myclass class myclass passdef func ...
Python命名空間與作用域
作用 命名空間可以使棧區中存放相同的名字,從而解決命名衝突 命名空間分為三種 內建命名空間 全域性命名空間 區域性命名空間 變數名a a 1 函式名func def func pass 類名myclass class myclass passdef func x,y pass func 1,2 找尋...