1. 程式人生 > >Python__名稱空間與作用域

Python__名稱空間與作用域

pytho foo 自帶 glob from 解釋器 變量 bar 如果

一:函數嵌套,在調用一個函數的過程中,又調用了其他函數

def bar():
print(‘from bar‘)
def foo():
print(‘from foo‘)
bar()
foo()
通過函數的嵌套使用,分解成最小的操作,一次調用


二:函數的嵌套定義:在一個函數的內部,又定義了一個函數
def f1():
x = 1
def f2():
print(‘from f2‘)
f2()
f1()

三:名稱空間,存放名字的地方,準確的說名稱空間是存放名字與變量值綁定關系的地方
內置名稱空間:python自帶的名字,在python解釋器啟動時產生,存放一些python內置的名字
全局名稱空間:在執行文件時,存放文件級別定義的名字
局部名稱空間:在執行文件的過程中,如果調用了函數,則會產生該函數的名稱空間,用來存放該函數內定義的名字,該名字在函數調用時生效,調用結束後失效
加載順序:內置名稱空間------>全局名稱空間----->局部名稱空間
名字的查找順序:局部名稱空間------>全局名稱空間----->內置名稱空間


四:作用域,作用的範圍
全局作用域:全局存活,全局有效
局部作用域:局部存活,局部有效
def f1():
x = 1
y = 2
print(locals())
print(globals())
f1()
print(locals())
print(globals())
print(locals() is globals())
改全局名稱:
x = 1
def f1():
global x
x = 2
f1()
print(x)

改局部名稱:
x = 0 
def f1():
x = 1
def f2():
x = 2
def f3():
nonlocal x#改的是函數正上方的值
x = 3
f3()
f2()
f1()


五:優先掌握,在函數定義時就已經固定,與調用位置無關
x = 1
def f1():
def f2():
print(x)
return f2
func = f1()
func()


































Python__名稱空間與作用域