Python的裝飾器(一)

2021-08-21 13:23:58 字數 1006 閱讀 6523

python的裝飾器有點像c#的擴充套件方法,python的裝飾器是在原函式的基礎上在做些邏輯上去,相當於擴充套件了函式功能,在講解裝飾器之前必須先說說什麼是閉包。

閉包也是python中的乙個語法,說的簡單點就是在函式裡面在建立乙個函式,先看個栗子

def greet(name):

def inside_func(saysomething):

print(saysomething + " " + name)

return inside_func

g = greet("旺財")

g("hello")

g("你好")

栗子很簡單,我們建立了greet函式,並在greet函式內部建立了inside_func函式,注意這裡inside函式使用了外部傳進來的引數name,並最終返回了inside_func這個函式,這個過程就叫閉包,那閉包有什麼好處呢,我們來看呼叫的過程,這裡我們建立乙個變數g並呼叫了greet函式給它賦值,注意這個過程內部函式並沒有執行而是直接被返回給了變數g,也就是g相當於對內部函式的引用,這個過程我們已經確定了乙個引數「旺財」,然後我們對g進行函式呼叫,每次傳進去不同的引數,我們會看到執行不同的結果,這就是閉包的強大之處,我們在給「旺財」打招呼的時候就不用每次都填入「旺財」引數

好了,明白了閉包我們就來看看乙個裝飾器的例子

def mydecorate(func):

def inside_func():

print("裝飾器的邏輯")

func()

return inside_func

@mydecorate

def show():

print("this is showshow")

show()

這裡我們寫了個裝飾器也是個閉包mydecorate函式,我們需要把這個裝飾器用於修飾我們的show函式,做法也很簡單,只需要在show函式的上方加上@mydecorate即可,這樣我們在呼叫下show函式看看,是不是發生了變化

Python 裝飾器(一)

首先,看一下下面三個函式,假如說我現在要加乙個條件,計算每個函式所花費時間。def add x,y return x y def sub x,y return x y def multi x,y return x y如果不考慮效率,我們可以每個函式逐一新增如下 import time def add...

python裝飾器 Python 裝飾器

簡言之,python裝飾器就是用於拓展原來函式功能的一種函式,這個函式的特殊之處在於它的返回值也是乙個函式,使用python裝飾器的好處就是在不用更改原函式的 前提下給函式增加新的功能。一般而言,我們要想拓展原來函式 最直接的辦法就是侵入 裡面修改,例如 這是我們最原始的的乙個函式,然後我們試圖記錄...

python裝飾器 裝飾器

由於函式也是乙個物件,而且函式物件可以被賦值給變數,所以,通過變數也能呼叫該函式。def now print 2015 3 25 f now f 2015 3 25 函式物件有乙個 name 屬性,可以拿到函式的名字 now.name now f.name now 現在,假設我們要增強now 函式的...