函數的嵌套有兩種方式: 交叉嵌套 迴環嵌套 交叉嵌套 交叉嵌套的方式是在本函數中調用同一級或上一級函數的嵌套方法: def func(foo): print(1) foo() print(3) def a(): print(1) b = func(a) print(b) 輸出的結果為: 1 1 3 ...
函數的嵌套有兩種方式:
- 交叉嵌套
- 迴環嵌套
交叉嵌套
交叉嵌套的方式是在本函數中調用同一級或上一級函數的嵌套方法:
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,列印出來。