網站首頁 編程語言 正文
python函數的兩種嵌套方法使用
函數的嵌套有兩種方式:
- 交叉嵌套
- 回環嵌套
交叉嵌套
交叉嵌套的方式是在本函數中調用同一級或上一級函數的嵌套方法:
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,再返回到全局空間。執行結束。
回環函數
回環函數就是在函數中調用下級函數的嵌套方法:
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.cnblogs.com/python960410445/p/16083933.html
相關推薦
- 2022-11-02 Android?shape標簽使用方法介紹_Android
- 2022-04-19 Windows中Python上傳文件到Liunx下的fastdfs
- 2022-08-11 boost.asio框架系列之socket編程_C 語言
- 2022-08-15 springboot切換為redis緩存
- 2022-12-14 WPF實現XAML轉圖片的示例詳解_C#教程
- 2022-08-02 Go語言resty?http包調用jenkins?api實例_Golang
- 2022-04-11 c#?理解csredis庫實現分布式鎖的詳細流程_C#教程
- 2022-06-21 C語言平衡二叉樹真題練習_C 語言
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支