larken

勤奋的人生才有价值

导航

装饰器(1)

#简单装饰器

import
time def show_time(func): def wraper(): start_time=time.time() func() end_time=time.time() print('spend %s' %(end_time-start_time)) return wraper @show_time def foo(): print("hello foo") time.sleep(3) foo()
#带参数的被装饰函数

import
time def show_time(func): def wraper(a,b): start_time=time.time() func(a,b) end_time=time.time() print('spend %s' %(end_time-start_time)) return wraper @show_time def add(a,b): time.sleep(1) print(a+b) add(2,4)
#不定长参数

import
time def show_time(func): def wraper(*args,**kwargs): start_time=time.time() func(*args,**kwargs) end_time=time.time() print('spend %s' %(end_time-start_time)) return wraper @show_time def add(*args,**kwargs): time.sleep(1) sum=0 for i in args: sum+=1 print(sum) add(2,4,8,9)
# 带参数的装饰器

import
time def time_logger(flag=0): def show_time(func): def wrapper(*args, **kwargs): start_time = time.time() func(*args, **kwargs) end_time = time.time() print('spend %s' % (end_time - start_time)) if flag: print('将这个操作的时间记录到日志中') return wrapper return show_time @time_logger(3) def add(*args, **kwargs): time.sleep(1) sum = 0 for i in args: sum += i print(sum) add(2, 7, 5)
#多层装饰器

def
makebold(fn): def wrapper(): return "<b>" + fn() + "</b>" return wrapper def makeitalic(fn): def wrapper(): return "<i>" + fn() + "</i>" return wrapper @makebold @makeitalic def hello(): return "hello alvin" hello()
#类装饰器

import
time class Foo(object): def __init__(self,func): self._func=func def __call__(self): start_time=time.time() self._func() end_time=time.time() print('spend %s'%(end_time-start_time)) @Foo def bar(): print('bar') time.sleep(2) bar()

 

posted on 2018-08-30 09:39  larken  阅读(155)  评论(0)    收藏  举报