「python函式:」給定一個函式,怎麼在不修改原始碼的前提下,實現函式執行前和執行後輸出

Tuna發表於2021-10-11

裝飾器

裝飾器的原理

  • 實現原理:基於@語法和函式閉包,將原函式封裝在閉包中,然後將函式賦值一個新的函式(內層函式),執行函式時再在內層函式中執行的閉包中的原函式。
  • 實現效果:可以在不改變原函式內部程式碼和除錯方式的前提下,實現在函式執行和執行擴充套件功能。
    使用場景:多個函式系統統一在執行前後自定義一些功能。
  • 裝飾器示例
def outer(origin):
    def inner(*args,**kwargs):
        #執行前
        ret = origin(*args,**kwargs)   #呼叫原來的func函式
        #執行後
        return ret 
    return inner


@outer #這裡表示 func = outer(func)
def func():
    pass
func()

案例

def outer(origin):
    def inner():
        print("berfore)
        res = origin() # 呼叫原來的func函式
        print("after")
        return res
    return inner


@outer #func = outer(func)

def func():
    print("我是func函式")
    value = (11,22,33,44)
    rerurn value

result = func()
print(result)
本作品採用《CC 協議》,轉載必須註明作者和本文連結
想要照亮更多人,那必須讓自己像太陽全身發亮。

相關文章