#!-*-coding:utf-8-*-import timeclass MyDecorator(object): def __init__(self,f): self.f=f print("MyDecorator __init__") #f() def __call__(self): print("MyDecorator __call__ before") self.f() print("MyDecorator __call__ after ")@MyDecoratordef aFunc(): print("aFunc...")class MyDecoratorWithArguments(object): def __init__(self,arg1,arg2,arg3): print('MyDecoratorWithArguments __init__') self.arg1=arg1 self.arg2=arg2 self.arg3=arg3 def __call__(self,f): print("Inside __call__ of MyDecoratorWithArguments") def wrapper(*args): print("MyDecoratorWithArguments wrapper in") f(*args) print("MyDecoratorWithArguments wrapper out") return wrapper@MyDecoratorWithArguments('hello','world',42)def bFunc(a1,a2,a3,a4): print("bFunc ",a1,a2,a3,a4)def timecount(f): print('Inside timecount') def wrapper(): start=time.clock() print('timecount wrapper before ') f() print('timecount wrapper after') end=time.clock() print('Used : '+str(end-start)) return wrapper@timecountdef cFunc(): print('cFunc ...')def timecount_withargs(f): print('Inside timecount_withargs') def wrapper(*args): print('timecount_withargs wrapper before') f(*args) print('timecount_withargs wrapper after') return wrapper@timecount_withargsdef dFunc(arg1,arg2,arg3,arg4): print('dFunc ',arg1,arg2,arg3,arg4)if __name__=='__main__': print('*'*30) aFunc() print('*'*30) bFunc('say','hello','test','jack') print('-'*30) cFunc() print('-' * 30) dFunc('hello','world',['a','b',3,4],43) print('-' * 30)