函数的嵌套
函数的嵌套调用:在调用一个函数的过程中,其内部代码;又调用了其他函数
其好处是可以简化外层函数的代码,使结构更清晰
可以将一个大的复杂的功能拆分为多个简单的小功能
函数的嵌套定义:一个函数内部又定义了另外一个函数
需要注意的是:内部定义的函数,只能在内部使用,外界无法直接访问
名称空间
namespace
就是存储名字的内存区域
名称空间的分类
内置名称空间,存的是解释器自带的名称,其特点是在程序运行过程中一直有效
特点:是在程序运行过程中一直有效
生命周期:随着解释器的启动而生效,解释器运行结束则失效
全局名称空间,只要是顶着最左边写的,没有任何缩进的
特点:只在文件运行时有效
生命周期:在文件运行时生效,在文件运行完毕后失效
局部名称空间:存的是函数内定义的名字
特点:仅在函数调用时生效
生命周期:随着函数的调用而生效,函数调用结束则失效
名称空间的加载顺序
内置 》 全局 》 局部
名字的查找顺序
局部 》 全局 》 内置
作用域
域指的是范围,作用域指的是作用的范围,
全局作用域:包含的是内置名称空间和全局名称空间的名字
特点:全局有效
局部作用域:包含的是局部名称空间中的名字
特点:局部有效
global:在局部声明一个名字时来自全局作用域的,可以用来在局部修改全局的不可变类型
nonlocal:声明一个名字时来自当前层外一层作用域,可以用来在局部修改外层函数的不可变类型
函数对象
函数是第一类对象:指的是函数名指向的值可以被当作数据去使用
可以被引用
可以当中参数传给另一个函数
可以当作一个函数的返回值
可以当作容器类型的元素
闭包函数
闭:指的是闭包函数是定义在一个函数内部的函数
包:该内部函数包含对外层函数作用域名字的引用
闭包函数提供了一种为函数体传值的解决方案