闭包函数,和装饰器
闭包函数
内部函数包含对外部作用域而非全剧作用域名字的引用,
该内部函数称为闭包函数
给函数体传值的两种方式
-
传参
-
位置传参和关键字传参
-
-
闭包
-
闭包函数相当于 用函数将函数封装;
闭包的方式其实是在函数内通过返回值的方式将函数名称返回;
然后通过调用函数名称的方式来调用函数
-
装饰器
定义
-
器:就是一个工具 装饰:给被装饰对象添加新的功能
必须遵循两个原则
-
1.不改变被装饰对象源代码
-
2.不改变被装饰对象(可调用对象)调用方式
开放封闭原则:
-
开放:对扩展开放 封闭:对修改封闭
基本模板
无参模板
-
理解:封装过程中其实是将inner赋给被修饰函数了;
所以传参的需求,可以写在inner的括号内;
且要在最内层函数处 写变量名 用来接收
有参模板
-
就是再包一层函数, 然后将装饰器需要传入的参数写在最外层函数的形参位置 位置传参和关键字传参都行
-
装饰器的有参无参,是针对装饰器内是否有参数的,而不是针对被修饰函数是否有参数
补充知识点
统计函数运行时间
爬虫
-
理解:通过方法获取html页面数据 方法:import requests中的request.get(url)
装饰器修复技术
如果没使用@wraps(func)
1、那调用被装饰的函数,返回的事内层函数
2、A.name返回的会是A函数的名称
装饰器嵌套
先写一个被装饰函数和两个闭包函数
然后按先要执行功能的顺序写两次语法糖, 通过语法糖的返回值传递的方式 两个功能就顺序执行了
装饰器语法糖:
会将紧挨着它的可调用对象的名字当做参数自动传入调用装饰器
语法糖在书写的时候应该与被装饰对象紧紧挨着
两者之间 不要 有空格
执行原则:
-
装饰器在装饰的时候 顺序从下往上
装饰器在执行的时候 顺序从上往下
理解:将最近的一个可调用对象传到装饰器