內嵌函式(巢狀函式):
意思:在函式裡面再定義乙個新的函式
如果在函式體內不呼叫內嵌的函式,那麼無法在外部呼叫
def my_pr1():
print("第一層列印")
def my_pr2():
print("第二層列印")
my_pr2()#如果在函式體內不呼叫內嵌的函式,那麼無法在外部呼叫
my_pr1()
作用域:
local(區域性作用域) -->enclosing(函式範圍作用域)–>global(全域性作用域)—>build-in(內建物件作用域)
**塊級別的作用域: python沒有劃分**塊作用域
**塊裡的變數,外部可以呼叫
if 1>0:
name="automan"
print(name)
上述**執行結果:
automan
函式基本的作用域:
區域性作用域:
函式內部定義的變數是區域性變數,外部無法訪問
a=50
def change(x):
x=6change(a)
print("after change:",a)
上述**執行結果:
after change: 50
def func3():
superman="automan"
print(superman)
執行結果:
nameerror: name 『superman』 is not defined
內嵌關係的函式的作用域:
對於內嵌關係的函式的作用域依然遵循local(區域性作用域) -->enclosing(函式範圍作用域)–>global(全域性作用域)—>build-in(內建物件作用域)
如果自身函式有目標變數,則使用自身函式內的變數的值;
如果沒有,會向上找父函式中是否存在目標變數,如果有,則使用父函式中的該變數的值;【如果父函式還有父函式,也會一直向上查詢】
直到離開最外層的函式體,那麼會在全域性範圍內找該變數
如果再沒有,會到內建物件作用域找
都沒有就報錯,丟擲異常
def func4():
superman="automan"
def haha():
print(superman)
haha()
func4()
執行結果:
automan
非內嵌關係的函式的作用域:
非內嵌關係的函式作用域依然遵循local(區域性作用域) -->enclosing(函式範圍作用域)–>global(全域性作用域)—>build-in(內建物件作用域)
但由於不是父子關係的巢狀函式,當自身函式範圍區域內找不到時,會直接到全域性作用域找
aotuman='金甲戰士'
def f5():
print(aotuman)
def f4():
aotuman='max'
f5()
f4()
執行結果:
金甲戰士
偏函式:
預設填寫某個函式的某些引數,返回乙個新的函式
避免了引數的重複輸入
import functools
print_t=functools.partial(print,end='\t')
print_t(1)
print_t(1)
print_t(1)
python 函式巢狀及作用域
函式可以巢狀嗎?當然可以 我們可以看到,外部函式outer func 的函式體中巢狀了乙個函式inner func 並且outer func 體中 還呼叫了內部函式inner func 所以每當呼叫outer func 的時候,都會呼叫一次inner func 我 們來看一下列印結果 我們可以看到,...
Python函式學習 作用域與巢狀函式
name alex li 全域性變數 def change name name print before change name 函式內部變數從內向外找,如果內部不存在,會找上一層 輸出 before change alex li name 金角大王,乙個有tesla的男人 區域性變數 print ...
巢狀函式和作用域
看上面的標題的意思是,函式還能套函式?name alex def change name name alex2 def change name2 name alex3 print 第3層列印 name change name2 呼叫內層函式 print 第2層列印 name change name ...