2. 作用域→作用範圍
存放名字的地方,是對棧區的劃分,有了命名空間之後,就可以在棧區中存放相同的名字,詳細的,命名空間
存放的名字:存放的python直譯器內建的名字存活週期:python直譯器啟動則產生,python直譯器關閉則銷毀
>>
>
print
in function print
>
>>
>
input
in function input
>
存放的名字:只要不是函式內定義、也不是內建的,剩下的都是全域性命名空間的名字存活週期:python檔案執行則產生,python檔案執行完畢後銷毀
import os
x=10
if13
>3:
y=20if3==
3:z=
30# func=函式的記憶體位址
deffunc()
: a=
111 b=
222class
foo:
pass
存放的名字:在呼叫函式時,執行函式體**過程中產生的函式內的名字存活週期:在呼叫函式時存活,函式呼叫完畢後則銷毀
def
func
(a,b)
:pass
func(10,
1)func(11,
12)func(13,
14)func(15,
16)
內建命名空間》全域性命名空間》區域性命名空間
區域性命名空間》全域性名空間》內建命名空間
當前所在的位置向上一層一層查詢
如果當前在區域性命名空間:
區域性命名空間→全域性命名空間→內建命名空間
# input=333
deffunc()
:# input=444
print
(input
)func(
)
如果當前在全域性命名空間
全域性命名空間->內建命名空間
input
=333
deffunc()
:input
=444
func(
)print
(input
)
示範1:
def
func()
:print
(x)x=
111func(
)
示範2:命名空間的"巢狀"關係是以函式定義階段為準,與呼叫位置無關
x=
1def
func()
:print
(x)def
foo():
x=222 func(
)foo(
)
示範3:函式巢狀定義
input
=111
deff1()
:deff2(
):# input=333
print
(input
)input
=222
f2()f1(
)
示範4:
x=
111def
func()
:print
(x)#
x=222func(
)
全域性作用域:內建命名空間、全域性命名空間
全域性存活
全域性有效:被所有函式共享
x=
111def
foo():
print
(x,id
(x))
defbar()
:print
(x,id
(x))
foo(
)bar(
)print
(x,id
(x))
區域性作用域: 區域性命名空間的名字
臨時存活
區域性有效:函式內有效
def
foo(x)
:deff1(
):deff2()
:print
(x)legb
# builtin
# global
deff1()
:# enclosing
deff2()
:# enclosing
deff3()
:# local
pass
python命名空間與作用域
命名空間 存放名字的地方,是對棧區的劃分,有了命名空間之後,就可以在棧區中存放相同的名字。存放的名字 存放python直譯器內建的名字 例如,print input print input 存活週期 python直譯器啟動則產生,python直譯器關閉則銷毀 存放的名字 只要不是函式內定義 也不是內...
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 找尋...