1 # -*- coding: utf-8 -*-
 2 
 3 from functools import wraps
 4 from inspect import isfunction
 5 
 6 def beforecalled(*args, **kwargs):
 7     print('before called! {}'.format(len(args)))
 8 
 9     for arg in args:
10         print(arg)        
11 
12 def aftercalled(*args, **kwargs):
13     print('after called! {}'.format(len(args)))
14     for k,v in kwargs.iteritems():
15         print('{0}={1}'.format(k,v))
16 
17     jclist=['-' for _ in xrange(20)]
18     print(''.join(jclist))
19 
20 def logdeco(*decoargs, **decokwargs):
21     def decotator(func):
22         @wraps(func)
23         def wrapper(*funcargs, **funckwargs):
24             beforecalled(*decoargs, **decokwargs)
25             result = func(*funcargs, **funckwargs)
26             aftercalled(*decoargs, **decokwargs)
27             return result
28         return wrapper
29     return decotator
30 
31 def log(*decoargs, **decokwargs):
32     if len(decoargs)==1 and len(decokwargs)==0:
33         if isfunction(decoargs[0]) or hasattr(decoargs[0],'__call__'):
34             return logdeco()(decoargs[0])
35 
36     def wrappered(func):
37         return logdeco(*decoargs, **decokwargs)(func)
38 
39     return wrappered
40 
41 @log('lisa',50,email='lisa@xxx.com')
42 def testmoreparas(x,y):
43     print('x*y={}'.format(x*y))
44 
45 @log()
46 def testemptypara(x,y):
47     print('x*y={}'.format(x*y))
48 
49 @log
50 def testjustlog(x,y):
51     print('x*y={}'.format(x*y))    
52 
53 if __name__=='__main__':
54     testmoreparas(5,6)
55     testemptypara(4,5)
56     testjustlog(3,4)
View Code

相关文章:

  • 2022-12-23
  • 2021-08-01
  • 2021-09-04
  • 2022-12-23
  • 2022-12-23
  • 2021-10-25
  • 2022-12-23
  • 2021-12-27
猜你喜欢
  • 2021-11-04
  • 2021-07-28
  • 2021-07-08
  • 2022-12-23
  • 2022-02-09
  • 2021-11-28
  • 2021-06-10
相关资源
相似解决方案