網站首頁 編程語言 正文
閉包
閉包就是能夠讀取其他函數內部變量的函數。
def test1(k, b): def test1_1(x): print(k*x+b) return test1_1 t1 = test1(1, 2) t1(0) t1(1) t1(2)
閉包中修改數據
x = 300 def test1(): x = 200 def test2(): nonlocal x print("----1----x = {}".format(x)) x = 100 print("----2----x = {}".format(x)) return test2 t1 = test1() t1()
裝飾器
實現對無參數函數的裝飾器
def set_func(func): def call_func(): print("裝飾器執行") func() return call_func @set_func # 等價于sumNum = set_func(sumNum) def sumNum(): print("sumNum") sumNum()
實現對有參數函數的裝飾器
# 對有參數、無返回值的函數進行裝飾 def set_func(func): def call_func(num): print("裝飾器") func(num) return call_func @set_func def sumNum(num): print("sumNum = {}".format(num)) sumNum(100)
對不定長參數的函數進行裝飾
def set_func(func): def call_func(*args, **kwargs): print("裝飾器") func(*args, **kwargs) # 拆包 return call_func @set_func def sumNum(num, *args, **kwargs): print("sumNum = {}".format(num)) print("args = {}".format(args)) print("kwargs = {}".format(kwargs)) sumNum(100, 200, c=100)
對有返回值的函數進行裝飾
def set_func(func): def call_func(*args, **kwargs): print("裝飾器") return func(*args, **kwargs) # 拆包 return call_func @set_func def sumNum(num, *args, **kwargs): print("sumNum = {}".format(num)) print("args = {}".format(args)) print("kwargs = {}".format(kwargs)) return "200 ok" sumNum(100, 200, c=100)
多個裝飾器對同一個函數裝飾
def add_h1(func): def h1(): h1_str = "<h1>" + func() + "</h1>" return h1_str return h1 def add_a(func): def call_func(): a_str = "<a>" + func() + "</a>" return a_str return call_func @add_h1 @add_a def get_str(): return "haha" get_str()
輸出為:<h1><a>haha</a></h1>
總結
原文鏈接:https://blog.csdn.net/weixin_43670190/article/details/122916070
相關推薦
- 2022-02-27 Web server failed to start. Port 8989 was already
- 2023-03-25 詳解Typescript?嚴格模式有多嚴格_其它
- 2022-04-25 利用Redis實現訪問次數限流的方法詳解_Redis
- 2022-03-19 淺談Go1.18中的泛型編程_Golang
- 2022-09-20 用python實現學生信息管理系統_python
- 2022-10-30 Python接口傳輸url與flask數據詳解_python
- 2023-09-12 Spring Boot注解說明
- 2023-02-10 WPF實現圓形進度條的示例代碼_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同步修改后的遠程分支