美文网首页
python 装饰器的使用--逐步添加中

python 装饰器的使用--逐步添加中

作者: LuckTime | 来源:发表于2017-11-29 11:08 被阅读10次

    装饰器是什么:
    装饰器的通用:
    带参数的装饰器的使用:
    装饰器的使用范围:
    入门之前,先提几个问题,然后依次回答这些问题。
    答:
    装饰器本质上是一个 Python 函数或类,它可以让其他函数或类在不需要做任何代码修改的前提下增加额外功能,
    装饰器的返回值也是一个函数/类对象。
    它经常用于有切面需求的场景,比如:插入日志、性能测试、事务处理、缓存、权限校验等场景,装饰器是解决这类问题的绝佳设计。
    有了装饰器,我们就可以抽离出大量与函数功能本身无关的雷同代码到装饰器中并继续重用。
    概括的讲,装饰器的作用就是为已经存在的对象添加额外的功能,从而使代码符合开放封闭原则。
    装饰器有两种类型,一种装饰器带参数的,一种装饰器不带参数的。
    装饰器带的应用场景:
    装饰器主要可以用在缓存、日志、URL路由和权限校验等常见的功能
    python中装饰器的应用场景使用demo

    # _*_ coding:utf-8 _*_
    # intend:简单装饰器的功能
    # time:2017年11月28日10:20:28
    # author:lucktime
    ## 通用装饰器
    def PrintData(func):
        def inner(*argvs,**kwargcs):
            print('printData ')
            x = func(*argvs,**kwargcs)
            return x
        return inner
    
    ## 带参数的装饰器
    def Argv_Fun(argv):
        def PrintData(func):
            def inner(*argvs,**kwargcs):
                print('printData Argv_Fun')
                print(argv)
                x = func(*argvs,**kwargcs)
                return x
            return inner
        return PrintData
    '''
    test()
    打印结果:
    printData
    printData Argv_Fun
    hello Jack
    ==============print test
    '''
    @PrintData 
    @Argv_Fun('hello Jack') 
    def test():
        print('==============print test')
    
    
    '''
    test1(3)
    打印结果:
    printData Argv_Fun
    hello Jack
    printData
    ==============print test1 value 3
    '''
    @Argv_Fun('hello Jack') 
    @PrintData
    def test1(a):
        print('==============print test1 value %d'%a)
    
    '''
    print(test2())
    打印结果:
    printData
    printData Argv_Fun
    hello Jack
    ==============print test2
    test2
    '''
    @PrintData
    @Argv_Fun('hello Jack') 
    def test2():
        print('==============print test2')
        return "test2"
    '''
    print(test4(2,5))   
    printData
    printData Argv_Fun
    hello Jack
    ==============print test4 2 + 5 = 7
    7
    '''
    @PrintData
    @Argv_Fun('hello Jack') 
    def test4(a,b):
        print('==============print test4 %d + %d = %d'%(a,b,(a+b)))
        return a+b
    
    test()
    
    test1(3)
    
    print(test2())
    print(test4(2,5))   
    

    相关文章

      网友评论

          本文标题:python 装饰器的使用--逐步添加中

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