Python语法糖(decorator)

类似作用

#-*- 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

你可能感兴趣的:(Python语法糖(decorator))