Python 命名空間與作用域

2021-10-04 03:43:08 字數 2505 閱讀 8716

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 找尋...