装饰器--callable 应用
功能:实现一个@log的decorator,使它既支持:@log 又支持 @log ('excute')
1 def log6(*args): 2 if callable(args[0]): 3 print args #是个地址 (<function now at 0x0397E1B0>,) 4 func = args[0] 5 def wrapper(*args,**kw): 6 print 'call {}'.format(func.__name__) 7 return func(*args,**kw) 8 return wrapper 9 else: 10 txt=args[0] #第一个 是传进来的参数,没有第二个元素 11 print args #是个元组 ('execute',) 12 def decorator(func): 13 @functools.wraps(func) 14 def wrapper(*args,**kw): 15 print '{}call2 {}'.format(txt,func.__name__) 16 return func(*args,**kw) 17 return wrapper 18 return decorator #直接返回装饰器 19 20 #@log3('execute') 21 #@log3 22 #@log4('begin call:','end call') 23 # now = log(now) 24 @log6 25 #@log6('execute') 26 def now(): 27 print '2012-22-33' 28 f=now 29 print f() 30 #装饰器 decorator 31 #函数对象有一个__name__属性,可以拿到函数的名字: 32 print now.__name__
显示结果:
('execute',) executecall2 now 2012-22-33 None

浙公网安备 33010602011771号