Python函数-高级(闭包/装饰器)
day10
函数嵌套:函数内嵌套函数的形式
def f1(): def f2(): def f3(): print('from f3') f3() f2() f1()
二、名称空间和作用域
1、名称空间含义
用于存放名字和值的绑定关系的地方。
2、名称空间的分类
a、内置名称空间:
作用:存放python解释器自带的名字
生命周期:在解释器启动时生效,解释器关闭时失效。
b、全局名称空间:
作用:除了内置和局部的名字外,其余都是全局名字。
生命周期:在文件执行时生效,文件执行完毕时失效。
c、局部名称空间:
作用:用于存放函数调用期间函数产生的名字,
生命周期:在文件执行过程中如果调用了某个函数才会临时生效,在函数执行完毕后失效。
注:加载顺序:内置名称空间--》全局名称空间--》局部名称空间
查找顺序:局部名称空间--》全局名称空间--》内置名称空间
3、作用域
域指的是区域、范围,作用域即作用的范围
全局作用域(全局作用范围) 对应内置域全局名称空间
特点:全局有效 全局存活
局部作用域(局部作用范围) 对应局部名称空间
特点:局部有效 临时存活
注:作用域关系是函数定义阶段就固定死了,域函数的调用位置无关。
在局部作用域内需要修改全局变量,需先声明。
语句:global x
nonlocal 一直往外层找,但是不能出函数,没找到就会报错。
三、闭包函数:
注:在任意位置调用函数都需要跑到定义函数时的地方去寻找作用域关系。
1、什么是闭包函数:
闭:函数是一个内部函数;
包:该函数包含对外部作用域(非全局作用域)名字的引用。
2、为函数传参的两种方式:
a、使用参数的形式;
b、包给函数(即闭包函数的实际应用)。
四、装饰器
1、什么是装饰器:
装饰器指的是为被装饰对象添加功能的一种工具。
2、为什么要用装饰器:
软件的维护应该遵循开放封闭原则(软件一旦上线运行后对修改源代码是封闭的,对扩展的功能是开放的)这样就用到了装饰器。