• day12 装饰器的模版


    1.什么是装饰器

      装饰器指的是为被装饰对象(别人)添加新功能的工具

      装饰器本身可以是任意可调用对象

      被装饰器对象也可以是任意可调用对象

    2.为何要用装饰器

      开放封闭原则:指的是对修改封闭,对扩展开放

      装饰器的实现原则:

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

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

      装饰器的目的

      就是在遵循原则1和2的前提下为被装饰对象添加新功能

    如何用

    import time

    def index():

      time.sleep(1)

      print('index page')

    def calc(func): 

      def wrapper():

        start = time.time()

        func()

        stop = time.time()

        print('用时:',stop - start)

      return wrapper

    index = calc(index)  #把wrapper这个函数名返回给

    index()

    以上calc就是一个装饰器,用来给index增加新功能

    但是这还不够,如果原函数有返回值,或者有有参数传进来,就会有问题,

    所以wrapper的形式要尽量做到像原函数

    装饰器的基本模版

    def new_func(func)

      def wrapper(*args,**kwargs):#把wrapper定义成可以接受任何格式参数

        #新增功能的代码

        res = func(*args,**kwargs) #把用户调用新函数wrapper带来的参数原封不动给到func,就和调用原函数一样,并拿到函数的返回值

        return res #如果原函数有返回值,那新函数也有返回值

      return wrapper #把添加好新功能的函数名返回,方便下次偷梁换柱的调用

    @new_func #这是装饰器的语法糖,写在要装饰对象的正上方定格写,相当于把接下来的函数名当作参数传给new_func,在赋值给函数名 login = new_func(login)

    def login():

      print(‘login’)

      

  • 相关阅读:
    awk书上练习
    矩阵运算
    从最大似然到EM算法浅解
    numpy 练习
    python lxml教程
    pycharm快捷键
    python正则表达式教程
    三门问题
    Solr本地服务器搭建及查询
    git简单使用
  • 原文地址:https://www.cnblogs.com/shanau2/p/10038453.html
Copyright © 2020-2023  润新知