Python 装饰器工作原理解析

发布时间:2019-09-12 07:58:28编辑:auto阅读(1632)

    #!/usr/bin/env python
    #coding:utf-8
    
    
    """
    装饰器实例拆解
    """
    
    
    def login00(func):
        print('00请通过验证用户!')
        return func
    
    def tv00(name):
        print('00你的用户是:%s' %name)
    
    
    # 装饰器的精简工作原理解释:
    
    tv = login00(tv00) # 返回tv函数的对象,赋值给tv
    
    tv('yh00') # 调用执行tv函数
    
    
    # 魔方版装饰器
    
    def login01(func):
        print('01请通过验证用户!')
        return func
    
    @login01
    def tv01(name):
        print('01你的用户是:%s' %name)
    
    tv01('yh01')
    
    # 存在一个问题,调用执行tv函数前,会执行login函数的print语句
    
    
    # 改进版装饰器
    
    def login02(func):
        def inner(arg):
            print('02请通过验证用户!')
            func(arg)
        return inner
    
    def tv02(name):
        print('02你的用户是:%s' %name)
    
    tv02 = login02(tv02) # 返回inner函数的对象,赋值给tv02;并把 tv02函数的对象 传递给 login02函数的形参 func
    
    tv02('yh02') # 调用执行tv02函数,把实参:yh02 传给 形参arg;执行tv02('yh02')
    
    # 改进 魔方版 版装饰器
    
    def login03(func):
        def inner(arg):
            print('03请通过验证用户!')
            func(arg)
        return inner
    
    @login03
    def tv03(name):
        print('03你的用户是:%s' %name)
    
    tv03('yh03')


关键字