1. 程式人生 > 實用技巧 >python 名稱空間及作用域

python 名稱空間及作用域

名稱空間:存放名字與值繫結關係的地方(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()