美文网首页
Python语法糖(decorator)

Python语法糖(decorator)

作者: 戴帽子的鼠 | 来源:发表于2015-08-01 17:57 被阅读1358次

    类似作用

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

          本文链接:https://www.haomeiwen.com/subject/tdkvqttx.html