一:命名空間:就是用來存放名字的記憶體空間命名空間分為三大類:
1、內建命名空間:存放python直譯器提供的名字
生命週期:python直譯器啟動則產生,python直譯器關閉則銷毀
2、全域性命名空間:頂級的名字
生命週期:開始python程式則啟動,python程式執行完畢則銷毀
#示例3.區域性命名空間:在函式內部定義的名字x = 1
y = 2
if true:
z = 3
while true:
bbb = 44
生命週期:呼叫函式則產生,函式呼叫結束則會立即銷毀
def二、名字訪問的優先順序:基於當前所在的位置向上查詢(區域性-》全域性-》內建)f1(aaa):
#aaa=555
deff2():
ccc = 666f1(555)
#例1注:命名空間的巢狀關係是在函式定義階段掃瞄語法的時候生成的# len=111
def f1():
# len=222
def f2():
# len=333
print(len)
f2()
f1()
#例2def f1():
print(len)
# f1()
len=111
# f1()
def foo():
len=333333
f1()
def bar():
len=44444
f1()
foo()
bar()
#例3:
aaa=333
def f1():
# print(aaa)
# print(len)
x=111
def ff1():
print("fff1===>x: ",x)
ff1()
def f2():
# print(aaa)
# print(len)
y=222
f1()
f2()
#例4:
len=111
def f1():
print(len)
def f2():
len=33333333333333333333
f1()
f2()
x=111三、作用域def func():
print(x)
y=2222
func()
全域性作用域:內建+全域性命名空間中的名字四、global、nonlocal特點:全域性存活、全域性有效
區域性作用域:區域性命名空間空間的名字
特點:臨時存活,區域性有效
4.1 global:在函式內宣告名字是來自於全域性的
l=[1,2,3]view codedeffunc():
l[0]=111func()
(l)x=10
deffunc():
global
x x=20func()
print(x)
4.2 nonlocal在函式內宣告名字是來自於外層函式的
x=333view codedeff1():
#x=111
deff2():
#global x
nonlocal x
x=222f2()
(x)f1()
命名空間與作用域
命名空間即存放名字與物件對映 繫結關係的地方。對於x 3,python會申請記憶體空間存放物件3,然後將名字x與3的繫結關係存放於命名空間中,del x表示清除該繫結關係。在程式執行期間最多會存在三種命名空間 伴隨python直譯器的啟動 關閉而產生 因而是第乙個被載入的命名空間,用來存放一些內建的...
命名空間與作用域
定義 它是儲存作用域中變數的字典。乙個命名空間中不能有重名,但是不同的命名空間可以重名而沒有任何影響。分類 按照變數定義的位置,可以劃分為以下3類 local,區域性命名空間,記錄了函式中定義的所有變數,包括函式的入參 內部定義的區域性變數。使用locals 檢視區域性命名空間。返回的是字典 glo...
命名空間與作用域
有了命名空間之後,就可以在棧區中存放相同的名字,詳細的命名空間 存放的名字 內建命名空間存放的是python直譯器自帶的名字 例如 print input 生命週期 py直譯器啟動則產生,直譯器關閉則銷毀 存放的名字 只要不是內建的和函式內定義的名字,都是全域性命名空間 生命週期 python檔案執...