装饰器进阶

装饰器进阶与应用

装饰器进阶
查看函数内包含的函数名和日志
func.__name__
func.__doc__
子主题 3
解决办法:
from functools import wraps
在外层函数内顶层@wraps(f)

开方封闭原则
对修改是封闭的
对扩展是开方的

带参数的装饰器
由来:许多个函数,经常在需要被装饰与不装饰直间切换
格式:

flag = True
def outer(flag):
def wrapper(f):
def inner(*args, **kwargs):
if flag:
print('函数执行前的操作')
ret = f(*args, **kwargs)
if flag:
print('函数执行后的操作')
return ret
return inner
return wrapper


@outer(flag)
def func(*args, **kwargs):
pass

func()

只需要修改flag就可以是否开启装饰器

多个装饰器装饰一个函数
执行步骤
def wrapper1(f):
def inner1(*args, **kwargs):
print('decorator 1 before')
ret = f(*args, **kwargs)
print('decorator 1 after')
return ret
return inner1


def wrapper2(f):
def inner2(*args, **kwargs):
print('decorator 2 before')
ret = f(*args, **kwargs)
print('decorator 2 after')
return ret
return inner2

@wrapper2
@wrapper1
def func():
print('-'*10)

func()

转载于:https://www.cnblogs.com/2018-01-30/p/8417899.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值