日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

python 装饰器实现事件绑定_Python装饰器是怎么实现的?

發(fā)布時(shí)間:2025/4/16 python 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python 装饰器实现事件绑定_Python装饰器是怎么实现的? 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

Python中的裝飾器是通過利用了函數(shù)特性的閉包實(shí)現(xiàn)的,所以在講裝飾器之前,我們需要先了解函數(shù)特性,以及閉包是怎么利用了函數(shù)特性的

① 函數(shù)特性

python中的函數(shù)特性總的來說有以下四點(diǎn):

1. 函數(shù)作為變量傳遞

def add(x):

return x + 1

a = add # 作為變量

說明:函數(shù)如果不加括號,是不會執(zhí)行的,代表的是一個(gè)函數(shù)對象,它是可以作為變量來傳遞

2.函數(shù)作為參數(shù)傳遞

def add(x):

return x + 1

def execute(f):

return f(3)

execute(add) # 作為參數(shù)

說明:一個(gè)函數(shù)可以接受另一個(gè)函數(shù)對象作為自己的參數(shù),并對函數(shù)對象進(jìn)行處理

3.函數(shù)作為返回值

def add(x):

return x + 1

def get_add():

return add # 作為返回值

說明:一個(gè)函數(shù)的返回值可以是另一個(gè)函數(shù)對象

4.函數(shù)嵌套及跨域訪問

def outer():

x = 1

def inner():

print(x) # 被嵌套函數(shù)inner內(nèi)部的x變量可以到封裝域去獲取

inner()

outer()

說明:一個(gè)函數(shù)(主函數(shù))內(nèi)部是可以嵌套另一個(gè)函數(shù)(子函數(shù))的,比如outer函數(shù)從內(nèi)部嵌套了inner。一個(gè)函數(shù)本地域沒有的變量,是可以跨到它的封裝域(主函數(shù)與子函數(shù)之間的范圍)去尋找的

② 閉包的實(shí)現(xiàn)

python中的裝飾器是通過閉包實(shí)現(xiàn)的,簡單地講,閉包就是引用了外部變量的內(nèi)部函數(shù),而閉包的實(shí)現(xiàn)正是利用了以上函數(shù)特性,下面我們來看看閉包是如何實(shí)現(xiàn)的:

def outer(x):

def inner(): # 函數(shù)嵌套

return x # 跨域訪問,引用了外部變量x

return inner # 函數(shù)作為返回值

closure = outer('外部變量') # 函數(shù)作為變量賦給closure

print(closure()) # 執(zhí)行閉包

執(zhí)行結(jié)果:

外部變量

說明:我們分析下這個(gè)流程,outer接收到'外部變量',傳給inner,作為它return的參數(shù),最后outer返回inner函數(shù),返回的inner函數(shù)作為變量傳遞給closure,最后執(zhí)行closure這個(gè)函數(shù)對象,實(shí)際上是執(zhí)行了inner這個(gè)函數(shù),返回了 '外部變量',這樣就實(shí)現(xiàn)了一個(gè)簡單的閉包

我們發(fā)現(xiàn)上面的閉包例子只用到了之前說的其中3個(gè)函數(shù)特性,函數(shù)作為參數(shù) 這個(gè)特性好像并沒用上,別急,我們一步步來,試想一下,outer的參數(shù)x是不是也可以是一個(gè)函數(shù)對象?

下面我們來改寫一下實(shí)現(xiàn)閉包的代碼:

def func():

return '函數(shù)func'

def outer(x):

def inner(): # 函數(shù)嵌套

return '戴了inner牌帽子的 ' + x() # 跨域訪問,引用了外部變量x

return inner # 函數(shù)作為返回值

closure = outer(func) # 函數(shù)func作為outer的參數(shù);函數(shù)作為變量賦給closure

print(func()) # 執(zhí)行原始函數(shù)

print(closure()) # 執(zhí)行閉包

執(zhí)行結(jié)果:

函數(shù)func

戴了inner牌帽子的 函數(shù)func

說明:我們看到打印的結(jié)果, 從 func() 到 closure(),我們是不是感覺函數(shù)func被裝飾了一番,變成了closure,具體是怎么裝飾的呢?

劃重點(diǎn)來了!!!!!!!!!!!

我們看到closure實(shí)際上是outer(func),func作為參數(shù)傳進(jìn)outer,outer的子函數(shù)inner對func返回的結(jié)果進(jìn)行了一番裝飾,返回了一個(gè)裝飾后的結(jié)果,最后outer返回inner,可以說inner就是裝飾后的func,這就是一個(gè)函數(shù)被裝飾的過程,重點(diǎn)在于執(zhí)行 outer(func) 這個(gè)步驟

③ 裝飾器語法糖 @

python給我們提供了語法糖 @,我們想執(zhí)行 outer(func) 的時(shí)候,只需要把outer函數(shù)@到func函數(shù)的上面就可以了

具體實(shí)現(xiàn)如下:

def outer(x):

def inner():

return '戴了inner牌帽子的 ' + x()

return inner

@outer

def func():

return '函數(shù)func'

print(func())

執(zhí)行結(jié)果:

戴了inner牌帽子的 函數(shù)func

說明:我們看到打印的結(jié)果跟我們執(zhí)行closure()的結(jié)果是一樣的,也就說明 加了outer裝飾器的func 等價(jià)于 outer(func),所以我們很清楚地知道裝飾器@的作用是什么了,就是拿來把被裝飾的函數(shù)作為參數(shù)傳遞到裝飾器函數(shù)里面加工的,最后執(zhí)行被裝飾函數(shù)的時(shí)候,就相當(dāng)于執(zhí)行了一個(gè)加工后的函數(shù)。

以上就是python中裝飾器的誕全生過程......ChrisYZX:Python裝飾器的誕生過程?zhuanlan.zhihu.com

總結(jié)

以上是生活随笔為你收集整理的python 装饰器实现事件绑定_Python装饰器是怎么实现的?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 久久人妻免费视频 | 欧美日韩黑人 | 欧美精品一区二区三区四区五区 | av大片在线看 | 亚洲国产成人91精品 | 奇米在线777 | 免费黄片毛片 | 久久国产电影 | 黄色三级免费网站 | 久久久精品动漫 | 成人性视频网站 | 成人青青草 | 日韩va| 中国极品少妇xxxx | 成人在线国产视频 | 精品福利在线 | 69久久精品无码一区二区 | 色爱av综合 | 超碰日韩在线 | 一区二区三区在线视频免费观看 | 久久久久久久久久久久久久 | 久久久91精品国产一区二区三区 | 三级做爰在线观看视频 | 尤物视频在线播放 | 国产高清久久久 | 男女考妣视频 | 毛片女人 | 欧美精品在线视频观看 | 久久久久a | 土耳其xxxx性hd极品 | 国产一区二区三区免费播放 | 动漫美女被到爽流 | av首页在线 | 色欲色香天天天综合网www | 蜜桃成熟时李丽珍国语 | 日韩欧美在线观看免费 | 理论片中文字幕 | 亚洲欧美一区二区视频 | 又黄又刺激的视频 | 一区影视 | 在线观看国产网站 | 成人中文在线 | 伦伦影院午夜理伦片 | 欧美一卡二卡在线观看 | 亚洲人精品午夜射精日韩 | 亚欧精品视频一区二区三区 | 91精品国产色综合久久不卡粉嫩 | 狠狠干伊人网 | 亚洲人成高清 | 麻豆一区二区 | 丰满肥臀噗嗤啊x99av | 一区二区三区四区五区六区 | 亚洲第一综合色 | 国产三级精品三级 | 日韩国产一区二区 | 国产精品手机在线观看 | 国产免费一区视频观看免费 | 黄色欧美在线观看 | 亚洲AV无码国产精品 | 东京干手机福利视频 | 国产 中文 字幕 日韩 在线 | 国产在线不卡一区 | 中文字幕高清一区 | 极品少妇av| 岛国一区二区 | 爱福利视频一区 | 黄色不卡视频 | 自拍1页 | 国产精品二 | 国产精品无码一区二区三区三 | 四虎精品在线 | 欧美乱插| 黄色国产在线观看 | 麻豆av一区二区 | av调教 | 福利在线小视频 | 午夜精品视频一区二区三区在线看 | 成人做爰视频www | 夫妻毛片 | 亚洲精品乱码久久久久久久久久久久 | 欧美一级久久 | 久久精品无码一区二区三区毛片 | 秋霞av网 | 樱花影院最新免费观看攻略 | 日韩二区 | 色姑娘综合网 | 欧美日韩黑人 | 女人毛片视频 | 日韩精品第1页 | 亚洲成人精选 | 狠狠干一区 | www日本在线| 免费观看av| 黄色av导航 | 亚洲美女性生活视频 | 亚欧美色图 | 日韩精品在线视频观看 | 欧美大片免费看 | 91亚色|