函式的嵌套有兩種方式:
- 交叉嵌套
- 回環嵌套
交叉嵌套
交叉嵌套的方式是在本函式中呼叫同一級或上一級函式的嵌套方法:
def func(foo):
print(1)
foo()
print(3)
def a():
print(1)
b = func(a)
print(b)
輸出的結果為:
1
1
3
None
首先,程式會將 Python 檔案中頂格的代碼運行,函式 func 和 a 都是先開辟記憶體空間存盤起來,但不會被執行,當程式走到賦值操作時,會先執行等號右邊的代碼,函式 func 被呼叫,函式 a 作為引數被傳到 func 中,func 函式被執行,順序也是從上往下,先是把 1 列印出來,然后呼叫引數 foo,
需要注意的是,foo 是形參,實參是 a,呼叫 foo 在此時的意思是呼叫函式 a,函式 a 被呼叫,又列印出一個 1 來,函式 a 運行完畢,回傳至函式 func,繼續執行下面的代碼,列印出 3 來,最后,函式默認回傳 None,賦值給 b,程式運行結束,
再看下面的代碼:
def func():
print(1)
print("我太難了")
print(2)
def foo(b):
print(3)
ss = b()
print(ss)
print(4)
def f(a,b):
a(b)
f(foo,func)
輸出的結果為:
3
1
我太難了
2
None
4
跟上面一樣,先將函式全都加載到新開辟的記憶體空間中,但不執行,到最后 f 函式被呼叫,foo 和 func 兩個函式作為引數被傳到函式 f 中,在函式 f 中,foo 函式被呼叫,引數為 func 函式,進入到 foo 函式,先列印 3,到賦值陳述句,先執行等號右邊的代碼,函式 func 被呼叫,
在函式 func 中,列印三個內容 1、我太難了 和 2,函式默認回傳值為 None,被賦值給 ss,列印 ss 就是列印 None,最后列印 4,然后回傳到函式 f,再回傳到全域空間,執行結束,
回環函式
回環函式就是在函式中呼叫下級函式的嵌套方法:
'''
學習中遇到問題沒人解答?小編創建了一個Python學習交流群:857662006
尋找有志同道合的小伙伴,互幫互助,群里還有不錯的視頻學習教程和PDF電子書!
'''
def func(a,b):
def foo(b,a):
print(b,a)
return foo(a,b) #先執行函式呼叫
a = func(4,7)
print(a)
輸出的結果為:
4 7
None
函式依然先存盤在新開辟的空間中不會被呼叫,運行到賦值陳述句時,還是先執行等號右邊的代碼,將兩個數字傳到函式 func中,在函式內部,依然是先開辟空間把函式 foo 放進去,運行到 return 不會馬上終止函式,而是先運行 return 后面的代碼,foo 函式被呼叫,傳進去的值是 4 和 7,然后列印出來,
需要注意的是,函式 foo 的形參與函式 func 的形參是相同的,不要給搞混了,日常寫代碼時不建議這樣使用,列印出 4 和 7 之后,運行到函式最后一行,函式默認回傳 None,然后再賦值給 a,列印出來,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/453772.html
標籤:Python
下一篇:python認識網路編程
