Python裝飾器的常見用途是什麼?

PHPz
發布: 2023-09-16 12:29:05
轉載
1408 人瀏覽過

Python裝飾器的常見用途是什麼?

在本文中,我們將學習Python裝飾器的常見用法

Python裝飾器是什麼?

Python裝飾器是一段程式碼,允許對現有函數進行新增或更新,而不必更改底層函數定義。當程式運行時,它嘗試編輯自身的另一部分,稱為元程式設計。

裝飾器是一種函數類型,它接受一個函數並傳回另一個函數,或接受一個類別並傳回另一個類別。它可以是任何可呼叫的(函數、類別、方法等),並且可以傳回任何內容;它也可以採用一個方法。

Python 裝飾器使用起來很簡單。

裝飾器接受一個可呼叫物件,該物件實作了特殊方法__call()__,稱為可呼叫對象,它會添加一些功能,並傳回一個可調用對象。

Example

的中文翻譯為:

範例

@somedecorator
def exmple_decorators():
   print("Hello tutorialspoint python decorators")
登入後複製

另一方面,編寫裝飾器需要一套完全不同的技能。這不是一件簡單的事;您必須完全理解以下內容 -

  • 關閉
  • 將函數用作一流參數,
  • 變數參數
  • 參數解包和
  • 甚至一些關於Python如何載入其原始程式碼的資訊。

掌握和完善所有這些需要很長時間。而你已經有了一長串要學習的東西。

這值得你花時間嗎?

答案顯然是。編寫裝飾器的主要優點是什麼?它們使您能夠在日常發展中毫不費力地表現出色?

讓我們看看!

分析、日誌記錄和偵測

我們經常需要專門衡量正在發生的情況並收集量化不同操作的指標,尤其是對於大型應用程式。裝飾器可以透過將這些值得注意的事件封裝在自己的函數或方法中,以極其易讀且簡單的方式解決此要求。

驗證和運行時檢查

Python的類型系統是強型別但動態的。儘管它有很多優點,但這也意味著一些問題可能會在編譯時被更靜態類型的語言(如Java)檢測到。

除此之外,您可能希望對進入和退出系統的資料實施更複雜的自訂檢查。裝飾器可以幫助您管理所有這些並將其同時應用於多個功能。

建立框架

一旦你學會了編寫裝飾器,你就能夠從它們簡潔的語法中獲益,這使你能夠輕鬆地為語言添加語義。這是接近能夠擴展Python語法的最佳選擇。

許多著名的開源框架都使用它。 Web 應用程式框架 Flask 使用它來將 URL 路由到處理 HTTP 請求的函數。

重複使用不可重複使用的程式碼

透過優雅的函數語法、函數式程式支援和完整的物件系統,Python提供了一些非常強大的工具,可以將程式碼封裝成易於重複使用的形式。然而,僅憑這些工具無法捕捉某些程式碼重用的模式。

考慮使用 Flakey API。您透過 HTTP 向能夠理解 JSON 的物件發送查詢,並且 99.9% 的情況下它都能正常運作。但所有請求中的一小部分會導致伺服器傳回內部錯誤,要求您重試該請求。在這種情況下,您需要添加一些重試邏輯。

Example

的中文翻譯為:

範例

# Creating a decorator function
def decoratorFunction(demofunction):
	def innerFunc():
		print("Yup...It is a decorated function")
		demofunction()
	return innerFunc()

# Creating a regular ordinary function
def normalFunction():
	print("Yup...It is a normal ordinary function")

decoratedResult = decoratorFunction(normalFunction)
decoratedResult
登入後複製

輸出

執行時,上述程式將產生以下輸出 -

Yup...It is a decorated function
Yup...It is a normal ordinary function
登入後複製

decoratorFunction()是前面範例中的一個裝飾器。簡而言之,裝飾器是一個包裝器,它包裝一個物件(而不改變它),並為原始物件添加新功能。因為這是一種常用的技術,Python提供了一個語法特性(稱為裝飾器),使其更容易使用。考慮下面的範例作為一個例子−

下面的函數:

@decorated_func
def ordinary_function():
   print("This is ordinary function")
登入後複製

等於

def ordinary_function():
   print("This is ordinary function")
decorated = decorated_func(ordinary_func)
登入後複製

提升你的職涯

一開始寫裝飾器很困難。這也不是火箭科學,但需要花費大量精力來學習和理解許多開發人員永遠不會費心的細節。這對你有利。如果您成為團隊中學習正確編寫裝飾器並編寫能夠回答現實問題的裝飾器的人,其他開發人員將使用您的裝飾器。一旦編寫裝飾器的艱苦工作結束,它們的使用起來就非常簡單。這可以大大增加您開發的程式碼的正面影響。它甚至可能讓你成為大師。

結論

裝飾器是一個令人難以置信的功能,可用於多種用途。它不僅僅是“接受函數或類別並返回函數或類別的函數或類別”。

無論您使用什麼方法來學習建立裝飾器,您都可能會對使用它們能夠實現的目標以及它將如何(不是開玩笑)永遠改變您編寫 Python 程式碼的方式感到興奮!

以上是Python裝飾器的常見用途是什麼?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:tutorialspoint.com
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
最新問題
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板