美文网首页
day14 装饰器

day14 装饰器

作者: 荭鲤鱼与緑鲤鱼与驴 | 来源:发表于2020-07-21 23:22 被阅读0次

    Ⅰ 闭包函数

        闭包函数=函数嵌套定义+函数对象+名称空间作用域

        闭:指的是该函数是定义再一个函数内部的函数

        包:指的是该函数访问了一个来自于外层函数的变量

        为函数体传参:直接使用参数传参;把函数体想要的参数包给他

    Ⅱ 装饰器

        什么是装饰器:器=工具;装饰:为被装饰者添加额外的功能

        为什么要用装饰器:软件一旦上线运行之后,就应该遵循开放封闭原则:开放指的是对拓展新功能开放;封闭指的是对修改源代码封闭

    Ⅲ 如何使用装饰器

        首先选定被装饰器对象

    调用函数后,运行到time.sleep时,等待2秒再运行print程序

        为函数index添加功能

        方案Ⅰ: 直接修改源代码为函数index添加新功能

    问题: 在源代码内添加代码

        方案Ⅱ : 找到所有调用index的位置,然后添加代码

    问题: 红线内为在index调用的位置添加的代码,如果有多个index调用位置,就需要添加多少个代码

        方案Ⅲ : 把装饰器写入一个函数内

    问题: 装饰器被写死了,只能装饰index函数

        方案Ⅳ : 把装饰器wrapper内的函数index修改成参数的形式

    问题: 原函数index的调用是在全局空间,修改后的调用的方式是wrapper(index),这修改了函数的调用方式

        方案Ⅴ : 基于闭包函数把wrapper函数想要的参数传给他,然后基于函数对象把闭包函数wrapper返回到全局,赋值给原函数名

    问题: 调用的index的参数被写死了,无法进行其他参数传值

        方案Ⅵ : 在上一个方案的基础上增加 * args 和 ** kwargs 来把wrapper的参数伪装

    问题:返回值与原函数不一致

        方案Ⅶ : 在⑥的基础上使wrapper函数和返回值保持一致

    问题: 函数不够简洁,看着比较杂乱

        方案Ⅷ : 在⑦的基础上加上装饰器语法符号@

    end

    相关文章

      网友评论

          本文标题:day14 装饰器

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