摘要:快速理解裝飾器,從名字可以大概看出,其作用可以概括為增強(qiáng)擴(kuò)展函數(shù)功能。裝飾器本質(zhì)上就是以函數(shù)作為參數(shù),能返回包含調(diào)用該參數(shù)函數(shù)及其他功能的新函數(shù)的一種函數(shù)。
快速理解
裝飾器,從名字可以大概看出,其作用可以概括為: 增強(qiáng)(擴(kuò)展)函數(shù)功能。
裝飾器本質(zhì)上就是: 以函數(shù)作為參數(shù),能返回包含調(diào)用該參數(shù)函數(shù)及其他功能的新函數(shù)的一種函數(shù)。
裝飾器通過(guò)在需要被裝飾的函數(shù)的定義前一行添加@decorator_name的方式使用
舉例說(shuō)明 源函數(shù)def hello(): print("hello world!!!")使用裝飾器擴(kuò)展hello()功能而不直接修改其定義
def log(func): """print function name before it"s called""" def wrapper(*args, **kw): # 閉包,實(shí)現(xiàn)裝飾器的基礎(chǔ) print("call %s(): " % func.__name__, end=" ") return func(*args, **kw) # 傳遞給wrapper的參數(shù)最后傳遞給了func return wrapper @log def hello(): print("hello world!!!") hello()
輸出:
call hello(): hello world!!!將@log 放到hello()定義前一行,相當(dāng)于執(zhí)行以下過(guò)程
hello = log(hello) # 此調(diào)用的執(zhí)行效果等效于 log.func = hello, hello = log.wrapper通過(guò) @property 裝飾器驗(yàn)證是否可以使用上述其等效方法替換正常修飾器的使用
class Student(object): # @property # 作用是把類方法轉(zhuǎn)換成類屬性 # def score(self): # return self._score # 替換 @property的效果 def score(self): return self._score score = property(score) @score.setter def score(self, value): if not isinstance(value, int): raise ValueError("score must be an integer!") if value < 0 or value > 100: raise ValueError("score must between 0 ~ 100!") self._score = value a = Student() a.score = 60 a.score
輸出:
60
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/42135.html
摘要:裝飾器的使用符合了面向?qū)ο缶幊痰拈_放封閉原則。三簡(jiǎn)單的裝飾器基于上面的函數(shù)執(zhí)行時(shí)間的需求,我們就手寫一個(gè)簡(jiǎn)單的裝飾器進(jìn)行實(shí)現(xiàn)。函數(shù)體就是要實(shí)現(xiàn)裝飾器的內(nèi)容。類裝飾器的實(shí)現(xiàn)是調(diào)用了類里面的函數(shù)。類裝飾器的寫法比我們裝飾器函數(shù)的寫法更加簡(jiǎn)單。 目錄 前言 一、什么是裝飾器 二、為什么要用裝飾器 ...
摘要:理解迭代對(duì)象迭代器生成器后端掘金本文源自作者的一篇博文,原文是,俺寫的這篇文章是按照自己的理解做的參考翻譯。比較的是兩個(gè)對(duì)象的內(nèi)容是后端掘金黑魔法之協(xié)程異步后端掘金本文為作者原創(chuàng),轉(zhuǎn)載請(qǐng)先與作者聯(lián)系。 完全理解關(guān)鍵字with與上下文管理器 - 掘金如果你有閱讀源碼的習(xí)慣,可能會(huì)看到一些優(yōu)秀的代碼經(jīng)常出現(xiàn)帶有 with 關(guān)鍵字的語(yǔ)句,它通常用在什么場(chǎng)景呢?今天就來(lái)說(shuō)說(shuō) with 和 上下...
摘要:最近看前端都展開了幾場(chǎng)而我大知乎最熱語(yǔ)言還沒(méi)有相關(guān)。有關(guān)書籍的介紹,大部分截取自是官方介紹。但從開始,標(biāo)準(zhǔn)庫(kù)為我們提供了模塊,它提供了和兩個(gè)類,實(shí)現(xiàn)了對(duì)和的進(jìn)一步抽象,對(duì)編寫線程池進(jìn)程池提供了直接的支持。 《流暢的python》閱讀筆記 《流暢的python》是一本適合python進(jìn)階的書, 里面介紹的基本都是高級(jí)的python用法. 對(duì)于初學(xué)python的人來(lái)說(shuō), 基礎(chǔ)大概也就夠用了...
摘要:接下來(lái)手工實(shí)現(xiàn)了一個(gè)簡(jiǎn)單的裝飾器原型,緊接著引入中的裝飾器語(yǔ)法。最后還列出了一些裝飾器的高級(jí)用法,包括給裝飾器傳遞參數(shù)等。讀完整個(gè)答案,一定能對(duì)裝飾器有較深的理解,并且知道理解裝飾器的思考過(guò)程。 作為一名程序員,如果沒(méi)有聽過(guò) Stackoverflow,那么你最好去面壁思過(guò)一下。程序員最需要閱讀的一本編程書籍(其實(shí)編程書留下這本就夠了!): showImg(https://segmen...
摘要:下面我們一起拋去無(wú)關(guān)概念,簡(jiǎn)單地理解下的裝飾器。用函數(shù)實(shí)現(xiàn)裝飾器裝飾器要求入?yún)⑹呛瘮?shù)對(duì)象,返回值是函數(shù)對(duì)象,嵌套函數(shù)完全能勝任。為了對(duì)調(diào)用方透明,裝飾器返回的對(duì)象要偽裝成被裝飾的函數(shù)。 來(lái)源:http://www.lightxue.com/under... ???????Python有大量強(qiáng)大又貼心的特性,如果要列個(gè)最受歡迎排行榜,那么裝飾器絕對(duì)會(huì)在其中。???????剛接觸裝飾器,會(huì)...
閱讀 955·2023-04-25 23:54
閱讀 3036·2021-11-08 13:21
閱讀 3759·2021-09-27 13:35
閱讀 3381·2021-07-26 23:41
閱讀 1043·2019-08-30 15:52
閱讀 3431·2019-08-30 11:27
閱讀 2088·2019-08-29 18:37
閱讀 528·2019-08-29 17:24