day14 装饰器

2020-07-21  本文已影响0人  荭鲤鱼与緑鲤鱼与驴

Ⅰ 闭包函数

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

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

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

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

Ⅱ 装饰器

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

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

Ⅲ 如何使用装饰器

    首先选定被装饰器对象

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

    为函数index添加功能

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

end
上一篇 下一篇

猜你喜欢

热点阅读