手把手教你使用python复杂一点点的装饰器

#只要@deco后面跟括号,都要 先传装饰器参数,返回 再传目标待装饰函数,返回 传目标函数的参数
#这个参数可以是类
def deco(arg):#装饰器的函数在这里传
    print('0',arg) 
    def _deco(func):#装饰函数在这里传 
        print('1',arg) 
        def __deco():#装饰函数的参数在这里传 
            print("所装饰函数 %s 调用前 [%s]." % (func.__name__, arg)) 
            func() 
            print(" 所装饰函数 %s 调用后 [%s]." % (func.__name__, arg)) 
            return 1 
        return __deco 
    return _deco 

#@deco表示调用 deco, 
#且每当调用接下来定义的函数 myfunc,则为调用 deco 返回的函数 func 

#与前面不同的地方在于,这里 @deco后面跟了(),是调用状态, 
#所以会直接传参、调用deco,并调用 函数deco返回的函数_deco 
#且每当调用接下来定义的函数 myfunc,则为 
# 调用 传装饰器参数的deco所返回的 传所装饰函数的_deco所返回的__deco 
@deco("装饰器参数") 
def myfunc(): 
    print(" 这一句出来了证明函数 myfunc 调用了") 
    return 'ok'#这里没用了,在deco中有用而已 

''' 
这里0 1都打印出来了 
''' 

@deco("装饰器参数er") 
def myfunc2(): 
    print(" 这一句出来了证明函数 2 调用了") 

myfunc() 
print('\n') a =myfunc2()#1 返回的是deco返回的1 
''' 
装饰器呢,测试的时候,例如测试函数性能的时候经常用。
 写一些工具的时候,例如协服务程序的定时器的时候也经常用。 
总之就有点类似 用在所写代码上的 一些工具 
'''

  



作者:头条号 / 趣味Python
链接:http://toutiao.com/i6313766939822916098/
来源:头条号(今日头条旗下创作平台)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
posted @ 2016-08-02 17:20  PythonChan  阅读(725)  评论(1编辑  收藏  举报