day11 函数对象
函数名其实就是变量名
- 引用,赋值
- 当作函数的返回值
- 当作函数的参数
- 作为容器的元素
函数的嵌套
函数的定义阶段只检测语法,不执行代码
所以没有被调用的函数内部只要没有语法上的错误就不会报错
煞笔才用嵌套
名称空间
内置名称空间
所学的所有内置方法,其实就是一个个函数,这些函数被封装后具有了某种功能
len() 是python的内置方法,python启动的时候,就会定义len()函数,并且把len()丢入内存空间,这个内存空间叫做内置名称空间
生命周期: python启动的时候活了,运行完就死了
全局名称空间
除了内置和局部,就是全局
生命周期:程序/文件运行的时候才会活,运行完毕就死了
局部名称空间
函数内部的都叫局部,也就是说函数内部定义的名字都放入了局部名称空间中了
生命周期:函数运行的时候会活,运行完就死了
执行顺序
内置名称空间--->全局名称空间--->局部名称空间
查找顺序
从当前名称空间开始查找,然后逐步往上,则顺序为局部-->全局-->内置
作用域
作用域关系在函数定义阶段就已经确定了
全局作用域: 适用于全局+内置,也就是说内置和全局定义的名字所有地方都能获取到
局部作用域:只能适用于局部范围,在局部定义的名字只能在局部获取到
函数与函数之间可能会有相同名字的变量,但是这两个变量毫无关系,作用域不同
不推荐使用的global/nonlocal
global:局部修改全局
nonlocal:将作用域等级提升一级,但最高不能到全局