前言
搞清楚两个关键词,就算摸透了今晚知识点的大半:
1.直接
2.间接
编程源自于生活,善用生活例子来理解编程思路
生活中会不会有这种情况:
手机/电脑存储空间不足,那我该怎么办???
1.更换/升级硬件 --> 直接升级
2.外接硬盘,U盘 --> 间接升级
可能你的手机/电脑,不支持在插SD卡,硬盘,所以是不能直接升级.所以只能间接升级
在编程开发中,也有类似情况: 需要对一个函数,程序进行功能的添加
但是得在不修改源代码/修改参数的情况下,实现新增功能 --> 通过闭包与装饰器
闭包和装饰器其实并没有涉及到新的知识点,只是对之前知识点的进阶用法.
一、初识闭包函数:
主要涉及到的知识点:
1.函数对象 --> 把函数当成一个单纯的数据来使用
2.函数嵌套 --> 函数里面还有函数 --> 闭
3.作用域 --> 包
闭: 封闭,闭包函数指的是在一个嵌套函数里的内层函数(在里面的那个函数)
包: 用内层函数来操作外层函数的数据
作用: 通过间接的方式,给函数传参或进行操作
闭包函数一般就是配合装饰器来使用的,单纯闭包是没啥意义,也不怎么使用的.可以说闭包就是为了装饰器而生
#闭包的标准格式:
#def 外层函数名():
# def 内层函数名():
# 代码块
# return 内层函数名
def fun():
def kylin():
print("我是打工仔,我骄傲")
return kylin
闭包的本质:间接修改,得到数据
二、初识装饰器:
主要涉及的知识点:
1.闭包
2.函数参数
用处: 在不修改源代码和调用方式的情况下,给函数添加功能
直接修改–> 整容
间接修改–> 化妆
开发的潜规则:
代码拓展 --> 开放 --> 可以加功能
源码修改 --> 封闭 --> 不能改源码
为什么不要随意改源码:改一改,改出bug了就哦豁了.修复起来很麻烦(git)
要拓展函数,通过其他函数来实现间接修改
函数的两个阶段:
1.定义函数
2.调用函数
装饰器: 在"不改变函数源代码"以及"函数调用方式"的情况下.给函数添加功能
生活例子 --> 装饰器 = 化妆品
闭包的作用就是可以帮助我们进行"间接"的修改,调用 --> 闭包结合装饰器
给函数添加功能,是要给它本质内在添加, 还是给它外在添加?
你烹饪一块肉.你腌制它. 是为了让 香料味道 在肉外面,还是在肉里面???
装饰器函数写好后,可以直接在要添加功能的函数写上 @ 装饰器名
快速的语法糖. 不需要再重新赋值 fun4 = get_time(fun4). 就默认是把装饰器的功能添加上了
总结
什么情况下会用到装饰器:
一个功能,很多情况下都会用到. 就可以把这个功能写成装饰器,给不同的函数来添加
就是生活中的化妆 --> 在不改变你脸的情况下,让你变得更好
在不修改源代码和调用方式的情况下.给函数添加功能
装饰器代码的实现原理:
用一个嵌套函数. 外层函数负责接受要添加功能的(对象函数),内层函数实现具体的新增功能.比如判断是否登录,生成验证码
可以理解为,装饰器就是给函数"打补丁"!!!
闭包: 在一个嵌套函数中,用外层函数来接受数据,再用内层函数操作数据
装饰器: 在不改变函数的源代码,调用方式的情况下.给函数新增功能