zoukankan      html  css  js  c++  java
  • 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’)

      

  • 相关阅读:
    ASP.NET Forms 身份验证概述
    JS中变量相关的细节分析
    document对象execCommand的命令参数介绍
    一点一点学ASP.NET之基础概念——HTTP运行期与页面执行模型
    读《大道至简》第一章有感
    读大道至简第二章有感
    课程作业2
    编写一个程序,用户输入两个数,求其加减乘除,并用消息框显示计算结果。
    201920201 20209324《Linux内核原理与分析》第一周作业
    jQuery Plugins
  • 原文地址:https://www.cnblogs.com/shanau2/p/10038453.html
Copyright © 2011-2022 走看看