python函數(shù)的兩種嵌套方法使用
python函數(shù)的兩種嵌套方法使用
函數(shù)的嵌套有兩種方式:
- 交叉嵌套
- 回環(huán)嵌套
交叉嵌套
交叉嵌套的方式是在本函數(shù)中調(diào)用同一級或上一級函數(shù)的嵌套方法:
def func(foo): ? ? print(1) ? ? foo() ? ? print(3) ? ?? def a(): ? ? print(1) b = func(a) print(b)
輸出的結(jié)果為:
1
1
3
None
首先,程序會將 Python 文件中頂格的代碼運行。函數(shù) func 和 a 都是先開辟內(nèi)存空間存儲起來,但不會被執(zhí)行。當程序走到賦值操作時,會先執(zhí)行等號右邊的代碼。函數(shù) func 被調(diào)用,函數(shù) a 作為參數(shù)被傳到 func 中。func 函數(shù)被執(zhí)行,順序也是從上往下,先是把 1 打印出來,然后調(diào)用參數(shù) foo。
需要注意的是,foo 是形參,實參是 a。調(diào)用 foo 在此時的意思是調(diào)用函數(shù) a。函數(shù) a 被調(diào)用,又打印出一個 1 來。函數(shù) a 運行完畢,返回至函數(shù) func,繼續(xù)執(zhí)行下面的代碼,打印出 3 來。最后,函數(shù)默認返回 None,賦值給 b。程序運行結(jié)束。
再看下面的代碼:
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)
輸出的結(jié)果為:
3
1
我太難了
2
None
4
跟上面一樣,先將函數(shù)全都加載到新開辟的內(nèi)存空間中,但不執(zhí)行。到最后 f 函數(shù)被調(diào)用,foo 和 func 兩個函數(shù)作為參數(shù)被傳到函數(shù) f 中。在函數(shù) f 中,foo 函數(shù)被調(diào)用,參數(shù)為 func 函數(shù)。進入到 foo 函數(shù),先打印 3。到賦值語句,先執(zhí)行等號右邊的代碼,函數(shù) func 被調(diào)用。
在函數(shù) func 中,打印三個內(nèi)容 1、我太難了 和 2。函數(shù)默認返回值為 None,被賦值給 ss。打印 ss 就是打印 None。最后打印 4,然后返回到函數(shù) f,再返回到全局空間。執(zhí)行結(jié)束。
回環(huán)函數(shù)
回環(huán)函數(shù)就是在函數(shù)中調(diào)用下級函數(shù)的嵌套方法:
def func(a,b): def foo(b,a): print(b,a) return foo(a,b) #先執(zhí)行函數(shù)調(diào)用 a = func(4,7) print(a)
輸出的結(jié)果為:
4 7
None
函數(shù)依然先存儲在新開辟的空間中不會被調(diào)用。運行到賦值語句時,還是先執(zhí)行等號右邊的代碼,將兩個數(shù)字傳到函數(shù) func中。在函數(shù)內(nèi)部,依然是先開辟空間把函數(shù) foo 放進去。運行到 return 不會馬上終止函數(shù),而是先運行 return 后面的代碼。foo 函數(shù)被調(diào)用,傳進去的值是 4 和 7,然后打印出來。
需要注意的是,函數(shù) foo 的形參與函數(shù) func 的形參是相同的,不要給搞混了。日常寫代碼時不建議這樣使用。打印出 4 和 7 之后,運行到函數(shù)最后一行,函數(shù)默認返回 None。然后再賦值給 a,打印出來。
到此這篇關(guān)于python函數(shù)的兩種嵌套方法使用的文章就介紹到這了,更多相關(guān)python函數(shù)嵌套內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python實現(xiàn)輸入二叉樹的先序和中序遍歷,再輸出后序遍歷操作示例
這篇文章主要介紹了Python實現(xiàn)輸入二叉樹的先序和中序遍歷,再輸出后序遍歷操作,涉及Python基于先序遍歷和中序遍歷構(gòu)造二叉樹,再后序遍歷輸出相關(guān)操作技巧,需要的朋友可以參考下2018-07-07python 逆向爬蟲正確調(diào)用 JAR 加密邏輯
這篇文章主要介紹了python 逆向爬蟲正確調(diào)用 JAR 加密邏輯,幫助大家更好的理解和使用python,感興趣的朋友可以了解下2021-01-01Python3.5內(nèi)置模塊之os模塊、sys模塊、shutil模塊用法實例分析
這篇文章主要介紹了Python3.5內(nèi)置模塊之os模塊、sys模塊、shutil模塊用法,結(jié)合實例形式分析了Python os模塊、sys模塊及shutil模塊針對文件、路徑等相關(guān)操作技巧,需要的朋友可以參考下2019-04-04Python __getattr__與__setattr__使用方法
__getattr__和__setattr__可以用來對屬性的設(shè)置和取值進行處理2008-09-09python實現(xiàn)微信機器人: 登錄微信、消息接收、自動回復(fù)功能
這篇文章主要介紹了python實現(xiàn)微信機器人: 登錄微信、消息接收、自動回復(fù)功能,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2019-04-04