装饰器函数
1.裝飾器
? 裝飾器:在不改變原函數(shù)的調用方式和函數(shù),額外的增加功能
簡單裝飾器def timer(func):def inner():print(time.time())func() # 原來的函數(shù)return inner
?
@timer # func1 = timer(func1)
def func1():print('func1')
函數(shù)帶返回值def timer(func):def inner():print(time.time())ret = func() # 原來的函數(shù)return retreturn inner
原函數(shù)攜帶參數(shù)def download(func):def inner(*args, **kwargs):print('下載軟件')func(*args, **kwargs)return inner
完整的裝飾器的寫法def wrapper(func):def inner(*args, **kwargs):# 執(zhí)行被裝飾函數(shù)之前進行的操作ret = func(*args, **kwargs)# 執(zhí)行被裝飾函數(shù)之后進行的操作return retreturn inner
裝飾器帶參數(shù)def outer(flag):def timer(func):def inner(*args, **kwargs):if flag:print(time.time())ret = func(*args, **kwargs) # 原來的函數(shù)else:ret = func(*args, **kwargs) # 原來的函數(shù)return retreturn innerreturn timer
?
@outer(True) # func1 = timer(func1) inner
def func1():print('func1')
多個裝飾器裝飾同一個函數(shù)def wrapper1(func):def inner(*args, **kwargs):print('wrapper1 前') # 2ret = func(*args, **kwargs)print('wrapper1 后') # 4return retreturn inner
?
def wrapper2(func):def inner(*args, **kwargs):print('wrapper2 前') # 1ret = func(*args, **kwargs)print('wrapper2 后') # 5return retreturn inner
?
@wrapper2 # func1 = wrapper2(func1) wrapper2.inner func=wrapper1.inner
@wrapper1 # func1 = wrapper1(func1) wrapper1.inner func=func1
def func1():print('func1') # 3return 'func1的返回值'
?
print(func1()) # 6
裝飾器修復技術from functools import wraps def timer(func):@wraps(func)def inner():print(time.time())ret = func() # 原來的函數(shù)return retreturn inner
裝飾器修復技術from functools import wraps def timer(func):@wraps(func)def inner():print(time.time())ret = func() # 原來的函數(shù)return retreturn inner
轉載于:https://www.cnblogs.com/PythonMrChu/p/10067158.html
總結
- 上一篇: 关于字节对齐
- 下一篇: 大数据技术_ 基础理论 之 数据采集与预