国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

Python裝飾器基礎概念與用法詳解

2020-02-16 00:15:23
字體:
來源:轉載
供稿:網友

本文實例講述了Python裝飾器基礎概念與用法。分享給大家供大家參考,具體如下:

裝飾器基礎

前面快速介紹了裝飾器的語法,在這里,我們將深入裝飾器內部工作機制,更詳細更系統地介紹裝飾器的內容,并學習自己編寫新的裝飾器的更多高級語法。

什么是裝飾器

裝飾是為函數和類指定管理代碼的一種方式。Python裝飾器以兩種形式呈現:

【1】函數裝飾器在函數定義的時候進行名稱重綁定,提供一個邏輯層來管理函數和方法或隨后對它們的調用。
【2】類裝飾器在類定義的時候進行名稱重綁定,提供一個邏輯層來管理類,或管理隨后調用它們所創建的實例。

簡而言之,裝飾器提供了一種方法,在函數和類定義語句的末尾插入自動運行的代碼——對于函數裝飾器,在def的末尾;對于類裝飾器,在class的末尾。這樣的代碼可以扮演不同的角色。

裝飾器提供了一些和代碼維護性和審美相關的有點。此外,作為結構化工具,裝飾器自然地促進了代碼封裝,這減少了冗余性并使得未來變得更容易。

函數裝飾器

通過在一個函數的def語句的末尾運行另一個函數,把最初的函數名重新綁定到結果。

用法

裝飾器在緊挨著定義一個函數或方法的def語句之前的一行編寫,并且它由@符號以及緊隨其后的對于元函數的一個引用組成——這是管理另一個函數的一個函數(或其他可調用對象)。

在編碼上,函數裝飾器自動將如下語法:

@decoratordef F(arg):  ...F(99)

映射為這個對等形式:

def F(arg):  ...F = decorator(F)F(99)

這里的裝飾器是一個單參數的可調用對象,它返回與F具有相同數目的參數的一個可調用對象。

當隨后調用F函數的時候,它自動調用裝飾器所返回的對象。

換句話說,裝飾實際把如下的第一行映射為第二行(盡管裝飾器只在裝飾的時候運行一次)

fun(6,7)decorator(func)(6,7)

這一自動名稱重綁定也解釋了之前介紹的靜態方法和property裝飾器語法的原因:

class C:  @staticmethod  def meth(...):...  @property  def name(self):...

實現

裝飾器自身是返回可調用對象的可調用對象。實際上,它可以是任意類型的可調用對象,并且返回任意類型的可調用對象:函數和類的任何組合都可以使用,盡管一些組合更適合于特定的背景。

有一種常用的編碼模式——裝飾器返回了一個包裝器,包裝器把最初的函數保持到一個封閉的作用域中:

def decorator(F):  def wrapper(*args):    # 使用 F 和 *args    # 調用原來的F(*args)  return wrapper@decoratordef func(x,y):  ...func(6,7)            
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 乐陵市| 景洪市| 汾西县| 柳河县| 共和县| 长春市| 蒙城县| 广昌县| 和林格尔县| 朝阳县| 英德市| 大田县| 那曲县| 高密市| 莲花县| 河南省| 义乌市| 平舆县| 包头市| 乌海市| 镇远县| 山东| 惠州市| 九江市| 手机| 莎车县| 北流市| 微博| 文水县| 上蔡县| 修文县| 黄陵县| 屯留县| 绩溪县| 内丘县| 正宁县| 霍山县| 汨罗市| 裕民县| 宁乡县| 华阴市|