大家好我是程序员_蓝天, 本文是为了方便初学者能够快速学习python,写的可能不是很好,希望大家多多包涵。 每个赞都是我前进的动力
初识闭包函数:
主要涉及的知识点:
1.函数对象 --> 把函数当成一个单纯的数据来使用
2.函数嵌套 --> 函数里面还有一个函数
3.作用域 --> 包
闭: 封闭,闭包函数指的是在一个嵌套函数里的内层函数
包: 用内层函数来操作外层函数的数据
作用:
通过间接的方式,给函数传参或者进行操作
闭包函数一般是配合装饰器来使用,单纯的闭包是没有什么意义的.可以说闭包就是为了装饰器而生
闭包的标准格式:
def 外函数名():
def 内函数名():
代码块
return 内函数
def fun():
def lantian():
print('天气冷了,穿够衣服')
return lantian
闭包的本质: 间接修改,得到数据
初识装饰器:
主要涉及到的知识:
1.闭包
2.函数对象 -- 把函数作为参数来传递
用处: 在不修改源代码和调用方式的情况下,给函数添加功能
开发的潜规则:
代码拓展 --> 开放 --> 可以加功能
源码修改 --> 封闭 --> 不能改源码
为什么不要随意改源码:改一改.改出bug了.修改起来也很麻烦(Git)
要拓展功能,就通过别的函数来实现'间接修改'
函数的使用分为两个阶段:
1.定义函数
2.调用函数
装饰器: 在'不修改函数源代码'以及'函数调用方式'的情况下,给函数添加功能
闭包的作用就是帮助我们就行'间接'的修改,调用 --> 闭包结合装饰器
给函数添加功能,是要给它本质内在添加,还是给它外在添加?
装饰器函数写好后.可以直接在要添加功能的函数上面写上@装饰器名
@ 装饰器名
def fun():
这样再调用fun函数.就是默认把装饰器里的功能都给加上了
就不用重新.写下面的语法.
fun = 装饰器(fun)
先写好装饰器函数,然后哪个函数要加功能.就给它上面加个@装饰器名
高内聚,低耦合
高内聚 --> 函数,代码的功能尽量集中,单一化
一个函数就专门实现一个功能,不写太多太杂
让功能更专一,专精.遇到Bug排查起来更方便,要进行对应修改也好对症下药
低耦合 --> 函数之间的关联性尽量低.就不要捆绑式,一个 函数里面还调用了好几个别的函数
就是为了避免在运行程序时,一个函数错,一堆函数错!!!
无谓累街坊 --> 一个人做错事了,结果把自己的邻居,街坊都给拖累了
总结:
什么情况下会用到装饰器:
一个功能,很多时候都会用到.就可以把这个功能写成装饰器,给需要的函数的添加
例子: 认证登录,输入验证码
在不修改源代码和调用方式的情况下.给函数添加功能
代码实现原理:
1.用一个嵌套函数,外层函数负责接受一个参数(要加功能的函数)
2.在内层函数中,调用这个函数.并且在内层函数里写上要加的功能代码
3.外层函数返回内层函数(内层函数 = 要加功能的函数+添加的功能)
如果是带参函数:
内层函数需要声明两个不定长参数
声明一个函数(推荐名为res).值为 fun(*args,**kwargs) # fun为要加功能的函数名
最后在内层函数返回 res
可以理解为装饰器就是给函数'打补丁'
print调试
有的时候项目运行没报错,但是一些功能没实现.排查方式之一就是用print
比如一个项目500行. 就可以隔50/100行写个print
50行 = print(50)
100行 = print(100)
如果print只输出到300.那就是300 - 500行之间的代码有问题.前面的都是正常的. 更快的排查出来代码异常点
巩固拓展博客: www.cnblogs.com/huxi/archiv…