`
david_je
  • 浏览: 369138 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

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.类也可以使用装饰器。在类定义之前声明。应该让类装饰器函数始终返回同类对象作为结果。需要使用原始类定义的代码可能要直接引用类成员。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics