1. 程式人生 > >Python基礎【裝飾器】

Python基礎【裝飾器】

裝飾器:

裝飾器:用來修改函式功能的函式

  • 可以在不改變原函式的基礎上新增功能
    實現裝飾器的方法:從函式中返回函式,將原函式作為一個引數傳給另一個函式

    程式碼:裝飾器pro_print在函式執行前輸出提示"welcome to class"

    def pro_print(fun): # 裝飾器函式
    def wrapper(*args,**kwargs): # 接收各種型別的不定長引數
    print("welcome to class")
    fun()
    return wrapper
    @pro_print # 語法糖,在函式前使用用於裝飾函式
    def fun():
    print('hello,python')
    fun()

    但裝飾器會覆蓋原有函式的函式名,提示文件等資訊

    def pro_print(fun): # 裝飾器函式
    def wrapper(*args,**kwargs): # 接收各種型別的不定長引數
    '''執行函式前提示welcom to class'''
    print("welcome to class")
    fun()
    return wrapper
    @pro_print # 語法糖,在函式前使用用於裝飾函式
    def fun():
    '''輸出hello,python'''
    print('hello,python')
    fun()
    print(fun.__name__)
    print(fun.__doc__)

    測試結果:

    Python基礎【裝飾器】


匯入functools中的wraps函式可以解決這個問題

from functools import wraps
def pro_print(fun): # 裝飾器函式
@wraps(fun)
def wrapper(*args,**kwargs): # 接收各種型別的不定長引數
'''執行函式前提示welcom to class'''
print("welcome to class")
fun()
return wrapper
@pro_print # 語法糖,在函式前使用用於裝飾函式
def fun():
'''輸出hello,python'''
print('hello,python')
fun()
print(fun.__name__)

測試結果:

Python基礎【裝飾器】