python命名空間與作用域

2021-10-07 07:04:12 字數 3093 閱讀 2629

命名空間:存放名字的地方,是對棧區的劃分,有了命名空間之後,就可以在棧區中存放相同的名字。

**存放的名字:**存放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 找尋...