摘要:快速理解裝飾器,從名字可以大概看出,其作用可以概括為增強擴展函數功能。裝飾器本質上就是以函數作為參數,能返回包含調用該參數函數及其他功能的新函數的一種函數。
快速理解
裝飾器,從名字可以大概看出,其作用可以概括為: 增強(擴展)函數功能。
裝飾器本質上就是: 以函數作為參數,能返回包含調用該參數函數及其他功能的新函數的一種函數。
裝飾器通過在需要被裝飾的函數的定義前一行添加@decorator_name的方式使用
舉例說明 源函數def hello(): print("hello world!!!")使用裝飾器擴展hello()功能而不直接修改其定義
def log(func): """print function name before it"s called""" def wrapper(*args, **kw): # 閉包,實現裝飾器的基礎 print("call %s(): " % func.__name__, end=" ") return func(*args, **kw) # 傳遞給wrapper的參數最后傳遞給了func return wrapper @log def hello(): print("hello world!!!") hello()
輸出:
call hello(): hello world!!!將@log 放到hello()定義前一行,相當于執行以下過程
hello = log(hello) # 此調用的執行效果等效于 log.func = hello, hello = log.wrapper通過 @property 裝飾器驗證是否可以使用上述其等效方法替換正常修飾器的使用
class Student(object): # @property # 作用是把類方法轉換成類屬性 # 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
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/42135.html
摘要:裝飾器的使用符合了面向對象編程的開放封閉原則。三簡單的裝飾器基于上面的函數執行時間的需求,我們就手寫一個簡單的裝飾器進行實現。函數體就是要實現裝飾器的內容。類裝飾器的實現是調用了類里面的函數。類裝飾器的寫法比我們裝飾器函數的寫法更加簡單。 目錄 前言 一、什么是裝飾器 二、為什么要用裝飾器 ...
摘要:理解迭代對象迭代器生成器后端掘金本文源自作者的一篇博文,原文是,俺寫的這篇文章是按照自己的理解做的參考翻譯。比較的是兩個對象的內容是后端掘金黑魔法之協程異步后端掘金本文為作者原創,轉載請先與作者聯系。 完全理解關鍵字with與上下文管理器 - 掘金如果你有閱讀源碼的習慣,可能會看到一些優秀的代碼經常出現帶有 with 關鍵字的語句,它通常用在什么場景呢?今天就來說說 with 和 上下...
摘要:接下來手工實現了一個簡單的裝飾器原型,緊接著引入中的裝飾器語法。最后還列出了一些裝飾器的高級用法,包括給裝飾器傳遞參數等。讀完整個答案,一定能對裝飾器有較深的理解,并且知道理解裝飾器的思考過程。 作為一名程序員,如果沒有聽過 Stackoverflow,那么你最好去面壁思過一下。程序員最需要閱讀的一本編程書籍(其實編程書留下這本就夠了!): showImg(https://segmen...
摘要:下面我們一起拋去無關概念,簡單地理解下的裝飾器。用函數實現裝飾器裝飾器要求入參是函數對象,返回值是函數對象,嵌套函數完全能勝任。為了對調用方透明,裝飾器返回的對象要偽裝成被裝飾的函數。 來源:http://www.lightxue.com/under... ???????Python有大量強大又貼心的特性,如果要列個最受歡迎排行榜,那么裝飾器絕對會在其中。???????剛接觸裝飾器,會...
閱讀 960·2023-04-25 23:54
閱讀 3043·2021-11-08 13:21
閱讀 3769·2021-09-27 13:35
閱讀 3390·2021-07-26 23:41
閱讀 1053·2019-08-30 15:52
閱讀 3438·2019-08-30 11:27
閱讀 2097·2019-08-29 18:37
閱讀 536·2019-08-29 17:24