1. 程式人生 > >Python裝飾器理解

Python裝飾器理解

python裝飾器 高階函數 out 發現 分享 打印 內部 存儲 -i

本文介紹Python其中一個強大的功能--裝飾器

技術分享圖片

裝飾器本質上就是一個函數,在不修改源代碼,調用方法的前提下,用來給其他函數添加功能的函數

想象一下,你已經開發完成一個功能,並且投入應用中,卻發現函數少些功能,怎麽辦?

修改函數源代碼已經不太可能,不能修改函數代碼,函數調用方法來實現增加函數功能,這時,裝飾器就該登場了

知識要求 : 高階函數,內嵌函數

先看一個函數:

def test1():
    print(-----in the test1 -----)

可以說是一個最簡單的函數,現在在不修改函數源代碼,不修改調用方法前提下,增加打印一個語句hello world,怎麽加?

我們需要再次定義一個函數:而這個函數,就是一個最簡單的裝飾器:

1 def warpper(func):
2     def inner():
3         print(‘hello world)
4         func() 
5     return inner

warpper函數內嵌inner函數,最後返回inner函數,可是,這個函數怎麽用呢?

你肯定已經看出來warpper函數參數是一個函數,在inner函數內部進行調用

所以,我們可以這樣用:

warpper(test1)

但是這樣肯定不行的,返回值是一個函數的引用,所以需要用一個變量名來存儲,然後加上小括號調用

func = warpper(test1)
func()
# -------------output( hello world \n hello jeden )

這就完成了函數的裝飾, 但是調用方法改變了,原來的test1改成了func(),所以做以下修改:

func() = warpper  # 改成  test1 = warpper(test1)
func()    #  改成test1()

已經完成了大半了,最後用python提供的語法糖就行了

類似與這樣 -- @function_name

# 第一過程最終代碼展示
def warpper(func):
    def
inner(): print(‘hello world) func() return inner @warpper def test(): print(‘hello jeden) test()

這就是最簡單的裝飾器案例。

Python裝飾器理解