类似作用
#-*- coding: UTF-8 -*-
def foo():
print('do something~')
def timeit(func):
def wrapper():
start=time.clock()
func()
end=time.clock()
print('used :',end-start)
return wrapper
foo=timeit(foo)
foo()
装饰器用法
import time
def timeit(func):
def wrapper():
start = time.clock()
func()
end =time.clock()
print 'used:', end - start
return wrapper
@timeit
def foo():
print ('in foo()')
foo()
带参数的装饰器
def decomaker(arg):
'通常对arg会有一定的要求'
"""由于有参数的decorator函数在调用时只会使用应用时的参数
而不接收被装饰的函数做为参数,所以必须在其内部再创建
一个函数
"""
def newDeco(func): #定义一个新的decorator函数
print func, arg
return func
return newDeco
@decomaker(deco_args)
def foo():
pass
foo()
同步锁的例子
注意几个参数的顺序
def synchronized(lock):
"""锁同步装饰方法
lock必须实现了acquire和release方法
"""
def sync_with_lock(func):
def new_func(*args, **kwargs):
lock.acquire()
try:
return func(*args, **kwargs)
finally:
lock.release()
new_func.func_name = func.func_name
new_func.__doc__ = func.__doc__
return new_func
return sync_with_lock
@synchronized(__locker)
def update(data):
"""更新计划任务"""
do something
网友评论