标签:from pre 额外 简单 flag rap print 完整 def
1.装饰器
? 装饰器:在不改变原函数的调用方式和函数,额外的增加功能
简单装饰器
def timer(func):
def inner():
print(time.time())
func() # 原来的函数
return inner
?
@timer # func1 = timer(func1)
def func1():
print(‘func1‘)
函数带返回值
def timer(func):
def inner():
print(time.time())
ret = func() # 原来的函数
return ret
return inner
原函数携带参数
def download(func):
def inner(*args, **kwargs):
print(‘下载软件‘)
func(*args, **kwargs)
return inner
完整的装饰器的写法
def wrapper(func):
def inner(*args, **kwargs):
# 执行被装饰函数之前进行的操作
ret = func(*args, **kwargs)
# 执行被装饰函数之后进行的操作
return ret
return inner
装饰器带参数
def outer(flag):
def timer(func):
def inner(*args, **kwargs):
if flag:
print(time.time())
ret = func(*args, **kwargs) # 原来的函数
else:
ret = func(*args, **kwargs) # 原来的函数
return ret
return inner
return timer
?
@outer(True) # func1 = timer(func1) inner
def func1():
print(‘func1‘)
多个装饰器装饰同一个函数
def wrapper1(func):
def inner(*args, **kwargs):
print(‘wrapper1 前‘) # 2
ret = func(*args, **kwargs)
print(‘wrapper1 后‘) # 4
return ret
return inner
?
def wrapper2(func):
def inner(*args, **kwargs):
print(‘wrapper2 前‘) # 1
ret = func(*args, **kwargs)
print(‘wrapper2 后‘) # 5
return ret
return inner
?
@wrapper2 # func1 = wrapper2(func1) wrapper2.inner func=wrapper1.inner
@wrapper1 # func1 = wrapper1(func1) wrapper1.inner func=func1
def func1():
print(‘func1‘) # 3
return ‘func1的返回值‘
?
print(func1()) # 6

装饰器修复技术
from functools import wraps
def timer(func):
@wraps(func)
def inner():
print(time.time())
ret = func() # 原来的函数
return ret
return inner
标签:from pre 额外 简单 flag rap print 完整 def
原文地址:https://www.cnblogs.com/PythonMrChu/p/10067158.html