python 裝飾器 初識

2022-04-02 06:03:27 字數 2841 閱讀 5551

1.函式無引數,無返回值

import

time

def f1(): #

無引數,無返回值

time.sleep(1)

print("

hello, world!")

def timer(f): #

f 是函式名

def inner(): #

閉包 start =time.time()

f()end =time.time()

total = end -start

print

(total)

return

inner

f1 = timer(f1) #

呼叫timer()函式,獲取inner函式名指向的記憶體位址的返回值

f1()

2.函式有返回值,無引數

import

time

def f1(): #

無引數,有返回值

time.sleep(1)

print("

hello, world!")

return

true

def timer(f): #

f 是函式名

def inner(): #

閉包 start =time.time()

ret =f()

end =time.time()

total = end -start

print

(total)

return

ret

return

inner

f1 = timer(f1) #

呼叫timer()函式,獲取inner函式名指向的記憶體位址的返回值

ret =f1()

print(ret)

3.函式有引數,有返回值

def f1(a, **kwargs):   #

引數,返回值 *args和**args可以組成任意型別的引數

time.sleep(1)

print("

hello, world!

", a, kwargs)

return

"abc

"def timer(f): #

f 是函式名

def inner(*args, **kwargs): #

閉包 start =time.time()

ret = f(*args, **kwargs)

end =time.time()

total = end -start

print

(total)

return

ret

return

inner

f1 = timer(f1) #

呼叫timer()函式,獲取inner函式名指向的記憶體位址的返回值

ret = f1(1, name='

tom'

)print(ret)

在不改變函式呼叫方式的情況下,在原函式的前後新增功能

開放:對擴充套件開放

封閉:對修改封閉

這是裝飾器開發的原則

簡化**

import

time

def timer(f): #

f 是函式名

def inner(*args, **kwargs): #

閉包 start =time.time()

ret = f(*args, **kwargs)

end =time.time()

total = end -start

print

(total)

return

ret

return

inner

@timer

#f1 = timer(f1),語法糖簡化**

def f1(a, **kwargs): #

引數,返回值 *args和**args可以組成任意型別的引數

time.sleep(1)

print("

hello, world!

", a, kwargs)

return

"abc

"ret = f1(1, name='

tom'

)print(ret)

裝飾器

def inner(*args, **kwargs):

#在原函式(被裝飾)前增加的功能

ret = f(*args, **kwargs) #

被裝飾的函式

#在原函式(被裝飾)後增加的功能

return

ret

return

inner

#def f1(*args, **kwargs):

print("

hello world!

", args, kwargs)

return

args

ret = f1('

a', '

b', name='

tom') #

f1指向的記憶體位址是inner指向的記憶體位址

print(ret)

巧記:1.先定義函式,再定義內部函式,返回內部函式的函式名

2.內部函式內放被裝飾的函式,傳進被裝飾函式的函式名

3.被裝飾的引數需要引數和返回值

ps:引數的傳遞:接收聚合,呼叫打散

初識函式 裝飾器

def inner args,kwargs 執行原函式之前的操作.ret func 執行原函式之後的操作.return ret return inner login status def auth func def inner args,kwargs if login status flag ret...

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 函式的...