• Python之装饰器复习


    一、什么是装饰器?

           装饰器他人的器具,本身可以是任意可调用对象,被装饰者也可以是任意可调用对象。


    二、强调装饰器的原则:

    1 不修改被装饰对象的源代码

    2 不修改被装饰对象的调用方式

    3:在遵循1和2的前提下,为被装饰对象添加上新功能

     

    三、装饰器的使用:

    import time
    def timmer(func):
        def wrapper(*args,**kwargs):
            start_time=time.time()
            res=func(*args,**kwargs)
            stop_time=time.time()
            print('run time is %s' %(stop_time-start_time))
            return res
        return wrapper
    
    @timmer         # 相当于 foo = timmer(foo)
    def foo():
        time.sleep(3)
        print('from foo')
    foo()
    无参数的装饰器
    def add(adds):     #新增一个参数,接收装饰器传来的值
        def decor(func):   
            print(adds)    
            def inner(*arg , **kw):      
                print('我是函数decor')
                result = func(*arg , **kw)  
                print(adds)        #打印装饰器中的值
                return result         
            return inner    
        return decor     #闭包
    
    # @decor  show = decor(show)
    @add('我是新加的参数adds')     #相当于返回decor函数,return decor
    
    def show(*arg , **kw):
        print('我是函数show')
        print('我是函数show中的参数name:',arg,'我是函数show中的参数age:',kw)
        return '我是函数show中的返回值'
    
    ret= show(*'xiaobo' , **{'zidian':25})     #*把'xiaobo'转换为元组 ,**把字典传进去
    print(ret)
    带参数的装饰器
    def decor(func):
        def inner(name,age):
            print('我是decor')        # 在函数之前执行的功能
            return func(name,age)    # 被装饰的函数
        return inner
    
    @decor
    def show(name , age):
        print('我是函数show')
        print('我是函数show中的参数name:',name,'我是函数show中的参数age:',age)
        return '我是函数show中的返回值'
    show('alex',20)
    被修饰的函数需要参数
  • 相关阅读:
    Ubuntu 安装Python3.8 【转】
    在 RK3399 上运行开源的 Mali GPU 驱动【转】
    windos下对SD卡进行操作,制作FAT32格式SD卡
    Linux使用htop命令说明【转】
    【RabbitMQ】Java发送监听消息
    【ElasticSearch】批量检索文档
    【MySQL】检查表是否存在
    【Postgres】安装
    【CentOS】定时crontab
    信创
  • 原文地址:https://www.cnblogs.com/ray-h/p/10277895.html
Copyright © 2020-2023  润新知