函数进阶-闭包与装饰器


前言

搞清楚两个关键词,就算摸透了今晚知识点的大半:
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). 就默认是把装饰器的功能添加上了


总结

什么情况下会用到装饰器:
一个功能,很多情况下都会用到. 就可以把这个功能写成装饰器,给不同的函数来添加
就是生活中的化妆 --> 在不改变你脸的情况下,让你变得更好

在不修改源代码和调用方式的情况下.给函数添加功能
装饰器代码的实现原理:
用一个嵌套函数. 外层函数负责接受要添加功能的(对象函数),内层函数实现具体的新增功能.比如判断是否登录,生成验证码

可以理解为,装饰器就是给函数"打补丁"!!!

闭包: 在一个嵌套函数中,用外层函数来接受数据,再用内层函数操作数据

装饰器: 在不改变函数的源代码,调用方式的情况下.给函数新增功能

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小八砸丶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值