python3裝飾器 高階

2022-04-02 06:03:25 字數 2252 閱讀 4261

作用:優化裝飾器

from functools import wraps     #

匯入wraps

def @wraps(f)

#wraps的語法糖

def inner(*args, **kwargs):

ret = f(*args, **kwargs)

return

ret

return

inner

deff1():

print("

hello, world!")

return'hi

'res =f1()

print

(res)

print(f1.__name__) #

檢視字串格式的函式名,列印的函式名inner->f1

實質:巢狀呼叫,三層巢狀函式

from functools import

wraps

import

time

flag =true

def

def

"""flag為true時函式被裝飾器裝飾

flag為flase時函式正常被呼叫

:param func:

:return:

"""@wraps(func)

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

聚合if

is_flage:

start =time.time()

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

打散 end =time.time()

print(end-start)

return

ret

else

: ret = func(*args, **kwargs)

return

ret

return

inner

return

#def

f1():

time.sleep(1)

print("

hello, world")

return

'joker

'ret =f1()

print(ret)

from functools import

wraps

func->f1

@wraps(func)

def inner1(*args, **kwargs):

print("

") #

2 ret = func(*args, **kwargs) #

3, f1()

print("

") #

4return ret #

ret is f1()的返回值,現在是執行inner1()的返回值

return

inner1

func->inner1

@wraps(func)

def inner2(*args, **kwargs):

print("

") #

1 ret = func(*args, **kwargs) #

inner1()

print("

") #

5, 執行完inner1()

return ret #

ret is inner1()的返回值即f1()的返回值,現在是執行inner2()的返回值

return

inner2

#def

f1(a):

print("

hello")

return

a"""

f1指向inner2的記憶體位址,f1()->inner2(),f1()的返回值是inner2()的返回值,也就是f1()函式自身的返回值

"""ret = f1(2)

print

(ret)

"""結果:

hello

2"""

現象:

Python3 高階 裝飾器

1.裝飾器功能 在不修改原函式的情況下,增強函式功能 2.不帶引數的函式 不帶引數的裝飾器 1 foo 被裝飾的函式 2 show time 是裝飾器 coding utf 8 import time def show time func def inner start time time.time...

python3 深入裝飾器

def outer c def inner uname print 我是 end c uname return inner outer def fun 1 uname print f 北京的 fun 1 mike def outer c def inner args,kwargs 通用的形參的設定 ...

Python3裝飾器解析

實現裝飾器知識儲備 1.函式即 變數 白話 函式實參 當作另乙個函式的形參 2.高階函式 a 把乙個函式名當作實參傳給另乙個函式 在不修改被裝飾函式源 的情況下為其新增功能 b 返回值中包涵函式名 說白了,此函式名是巢狀函式名 不修改函式的呼叫方式 3.巢狀函式 高階函式 巢狀函式 裝飾器 詳解im...