函数对象
函数名存放的是函数的地址,所以函数名也是对象,称为函数对象
函数是第一类对象,指的是函数名指向的值(函数的内存地址)可以被当作数据去使用
- 可以被引用
- 可以当作参数传给另一个函数
- 可以当作一个函数的返回值
- 可以当作容器类型的元素
函数嵌套
- 函数的嵌套调用:在调用一个函数的过程中,内部代码又调用了其他的函数
- 函数的嵌套定义:在一个函数的内部有定义了一个函数。在那一层定义的函数只能在那一层用
名称空间
名称空间就是用来存放名字与值内存地址绑定关系的地方(内存空间)
但凡查找值一定要通过名字,访问名字必须要去查找名称空间
名称空间三大分类
- 内置名称空间:存放的是python解释器自带的名字 built-in. len() max()
- 全局名称空间:存放的是文件级别的名字
- 局部名称空间:在函数内定义的名字
名称空间生命周期:
- 内置名称空间:在解释器启动时则生效,解释器关闭则失效
- 全局名称空间:在解释器执行python文件时则生效,文件执行完毕后则失效
- 局部名称空间:在调用函数时临时产生该函数的局部名称,调用完毕则回收
加载顺序:
内置 - > 全局 -> 局部
查找顺序
基于当前的位置往上查找
假设当前站在局部,查找顺序:局部 - > 全局 - > 内置
假设当前站在全局,查找顺序:全局 - > 内置
⭐️ 名字的查找顺序,在定义函数时就已经固定死了(即在检测语法时就已经确定了名字的顺序),与函数的调用位置无关,也就是说无论在任何地方调用函数,都必须回到当初定义函数的位置去确定名字的查找关系
作用域
域就是值范围,作用域指的就是作用的范围,分为两种
全局作用域:包含的是内置名称空间与全局名称空间的名字
特点:全局有效,全局存活
局部作用域:包含的是局部名称空间中的名字
特点:局部有效,临时存活