網(wǎng)站首頁(yè) 編程語(yǔ)言 正文
閉包
閉包就是能夠讀取其他函數(shù)內(nèi)部變量的函數(shù)。
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)
閉包中修改數(shù)據(jù)
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()
裝飾器
實(shí)現(xiàn)對(duì)無(wú)參數(shù)函數(shù)的裝飾器
def set_func(func): def call_func(): print("裝飾器執(zhí)行") func() return call_func @set_func # 等價(jià)于sumNum = set_func(sumNum) def sumNum(): print("sumNum") sumNum()
實(shí)現(xiàn)對(duì)有參數(shù)函數(shù)的裝飾器
# 對(duì)有參數(shù)、無(wú)返回值的函數(shù)進(jìn)行裝飾 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)
對(duì)不定長(zhǎng)參數(shù)的函數(shù)進(jìn)行裝飾
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)
對(duì)有返回值的函數(shù)進(jìn)行裝飾
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)
多個(gè)裝飾器對(duì)同一個(gè)函數(shù)裝飾
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>
總結(jié)
原文鏈接:https://blog.csdn.net/weixin_43670190/article/details/122916070
相關(guān)推薦
- 2023-06-13 C語(yǔ)言中求余運(yùn)算符的使用解讀_C 語(yǔ)言
- 2021-11-18 C#?利用VS編寫(xiě)一個(gè)簡(jiǎn)單的網(wǎng)游客戶端_C#教程
- 2022-06-27 python中SSH遠(yuǎn)程登錄設(shè)備的實(shí)現(xiàn)方法_python
- 2022-07-13 SpringCloud之http客戶端Feign
- 2022-09-06 python?如何實(shí)現(xiàn)跳過(guò)異常繼續(xù)執(zhí)行_python
- 2022-12-08 C++中cout輸出中文信息亂碼問(wèn)題及解決_C 語(yǔ)言
- 2022-11-14 react使用useImperativeHandle示例詳解_React
- 2022-12-16 Python中選擇結(jié)構(gòu)實(shí)例講解_python
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲(chǔ)小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運(yùn)算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過(guò)濾器
- Spring Security概述快速入門(mén)
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯(cuò)誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實(shí)現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡(jiǎn)單動(dòng)態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對(duì)象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊(duì)列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支