def deco(arg): #最外层函数定义的参数是=装饰函数的参数,该参数也可以是个类
def _deco(func): #中间层函数定义的参数是=被装饰函数的名称
def __deco(*args,**kwargs): #最内层函数定义的参数=传递给被装饰函数
print '='*40
print "before %s called [%s]." % (func.__name__,arg)
ret=func(*args,**kwargs)
print func #打印被装饰函数的内存地址
print "after %s called.[%s]." % (func.__name__,arg)
return ret #返回被装饰函数的返回值
return __deco #将最内层函数作为值返回
return _deco #返回中间层函数
@deco("mymodule")
def myfunc(a,b):
print ("myfunc(%s,%s) called" % (a,b))
return a + b
@deco("mymodule2")
def myfunc2(a,b,c):
print ("myfunc(%s,%s,%s) called." % (a,b,c))
return a + b + c
myfunc(1,4)
myfunc2(5,6,9)
阅读(2448) | 评论(0) | 转发(0) |