python 的装饰器

在python中也有decorate的概念,装饰器是一个函数,其主要作用是包装另一个函数或者类。他可以透明的修改或者增加被包装对象的行为。


@trace
def square(x):
return x*x
等价于:
def square(x):
return x*x
square = trace(square)

函数本身被传递给trace(),后者返回一个对象替代原始的square.
例如:

enable_tracing=True
if enable_tracing:
debug_log=open("debug.log","w")

def trace(func):
if enable_tracing:
def callf(*args.**kwargs):
debug_log.write("Calling %s:%s,%s\n" %(func.__name__,args,kwargs))
r=func(*args,**kwargs)
debug_log.write("%s returned %s\n" %(func.__name__,r))
return r
return callf
else:
return func


1.使用装饰器时,必须按照他们的出现的先后顺序应用。

2.装饰器也可以使用参数,只接受带有@描述符的参数,接着返回在调用时使用函数作为参数的函数。

3.类也可以使用装饰器。在类定义之前声明。应该让类装饰器函数始终返回同类对象作为结果。需要使用原始类定义的代码可能要直接引用类成员。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值