python 名稱空間及作用域
阿新 • • 發佈:2020-08-11
名稱空間:存放名字與值繫結關係的地方(x=1, 名稱空間存放x和1的記憶體空間)
內建名稱空間:python直譯器啟動就有,python直譯器內建的名字,max,len,prient
全域性名稱空間:執行python檔案時生效,檔案級別定義的名字
區域性名稱空間:函式呼叫時生效,呼叫結束失效,函式內部定義的名字
載入順序:內建 -- > 全域性 --> 區域性
訪問名字的順序:區域性 -- > 全域性 --> 內建
def f1():
x=1
def f2():
x=2
def f3():
x=3
print(x)f3()
f2()
f1()
輸出結果:3
def f1():
x=1
def f2():
x=2
def f3():
print(x)
f3()
f2()
f1()
輸出結果:2
def f1():
x=1
def f2():
def f3():
print(x)
f3()
f2()
f1()
輸出結果:1
x='gobal'
def f1():
def f2():
def f3():
print(x)f3()
f2()
f1()
輸出結果:gobal
全域性作用域(全域性範圍):內建名稱空間與全域性名稱空間的名字,全域性存活,全域性有效globals()
區域性作用域(區域性範圍):區域性名稱空間的名字,臨時存活,區域性有效locals()
x=100
def f1():
x=1
print(x)
f1()
print(x)
輸出結果:1
100
打破函式層級限制來呼叫函式
def outter():
def inner():
print('inner')
return inner
f = outter()
f()
輸出結果:inner
函式的作用域關係是在函式定義階段就已經固定了,與呼叫位置無關
x=1
def outter():
def inner():
print('inner',x)
return inner
f = outter()
# f()
x=111111111111111111111111111111111111
def bar():
x=3
f()
bar()