如何建立函數裝飾器並將它們連結在一起
簡介
Python 中的裝飾器允許您可以修改函數的行為而不修改函數本身。您可以使用裝飾器在呼叫函數之前和之後新增功能、檢查輸入/輸出以及執行其他操作。
建立裝飾器
建立裝飾器,定義一個將另一個函數作為參數的函數。此函數應傳回一個包裝原始函數的新函數。
def make_bold(fn): # The new function the decorator returns def wrapper(): # Insertion of some code before and after return "<b>" + fn() + "</b>" return wrapper
連結裝飾器
您可以連結裝飾器以對函數套用多個修改。只需依序套用每個裝飾器,如下所示:
@make_bold @make_italic def say(): return "hello"
此程式碼將 make_bold 裝飾器套用到 make_italic 裝飾器,後者應用到 say 函式。結果是 say 函數傳回一個粗體和斜體的字串。
範例:連結裝飾器以格式化文字
假設您有一個傳回 a 的函數文字字串。您想要為文字新增粗體和斜體格式。您可以使用上面定義的裝飾器來實現此目的:
@make_bold @make_italic def formatted_text(text): return text print(formatted_text("Hello world"))
輸出:
<b><i>Hello world</i></b>
將參數傳遞給裝飾器
您可以將參數括在中來將參數傳遞給裝飾器括號:
def a_decorator_passing_arguments(function_to_decorate): def a_wrapper_accepting_arguments(arg1, arg2): print("I got args! Look: {0}, {1}".format(arg1, arg2)) function_to_decorate(arg1, arg2) return a_wrapper_accepting_arguments @a_decorator_passing_arguments def print_full_name(first_name, last_name): print("My name is {0} {1}".format(first_name, last_name)) print_full_name("Peter", "Venkman")
輸出:
I got args! Look: Peter, Venkman My name is Peter Venkman
結論
透過了解如何建立和連結裝飾器,您可以擴充Python 函數的功能。這種強大的技術可讓您以模組化和可重複使用的方式修改行為、執行檢查並增強程式碼。
以上是如何在 Python 中建立和連結函數裝飾器?的詳細內容。更多資訊請關注PHP中文網其他相關文章!