zoukankan      html  css  js  c++  java
  • Python Day12

    装饰器(闭包函数的一种应用场景)
     1 为何要用装饰器:
    开放封闭原则:对修改封闭,对扩展开放
     2 什么是装饰器
    装饰器他人的器具,本身可以是任意可调用对象,被装饰者也可以是任意可调用对象。
    强调装饰器的原则:1 不修改被装饰对象的源代码 2 不修改被装饰对象的调用方式
    装饰器的目标:在遵循1和2的前提下,为被装饰对象添加上新功能
    装饰器的定义:在不修改其他函数名和函数内部的代码的同时还可以给该函数添加功能
     3 装饰器的格式

             装饰器的格式:def 函数名1(参数):这里的参数就是代替需要装饰的函数名

    
    

              def 函数名2(*args,**kwargs):

    
    

                添加功能

    
    

                执行函数(*args,**kwargs)这里的函数执行,就是外层的参数执行

    
    

                添加功能

    
    

                return 执行函数后赋值的对象

    
    

              return 函数名2

    
    

      装饰器本身就是一个函数,属于闭包函数的一种。

         

     4. 先看简单示范
    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
            def foo():
                time.sleep(3)
                print('from foo')
            foo()
    
    输出结果
    from foo
    run time is 3.000171422958374
          5 装饰器语法:
    被装饰函数的正上方,单独一行
    @deco1
    @deco2
    @deco3
    def foo():
    pass

    foo=deco1(deco2(deco3(foo)))
    
    
     
    def wrapper(func):
    def inner(*args,**kwargs):
    print('你正在调用%s函数'%func.__name__)
    ret = func(*args,**kwargs)
    return ret
    return inner
    @wrapper
    def welcome(name):
    print('welcome:%s'%name)

    @wrapper
    def home():
    print('欢迎来到home页!')
    welcome('alex')
    home()


    输出结果

    你正在调用welcome函数
    welcome:alex
    你正在调用home函数
    欢迎来到home页!

     
     
  • 相关阅读:
    I2C调试
    linux读取cpu温度
    看react全家桶+adtd有感
    react学习1(搭建脚手架,配置less,按需引入antd等)
    去掉console.log,正式环境不能有console.log
    Vue的minix
    数组去重我总结的最常用的方法,其他不常用就不写了
    inline-block bug解决方法
    vue中使用less/scss(这是2.0 3.0就不需要手动配置了只需要安装依赖就行了)
    Vue 调用微信扫一扫功能
  • 原文地址:https://www.cnblogs.com/liuduo/p/7460138.html
Copyright © 2011-2022 走看看