Day11名称空间,作用域,闭包函数
Day11
1.函数对象: ①可以被引用
②可以作为另一个函数的参数
③可以作为另一个函数的返回值0
④可以被存储到容器类型中
2.函数嵌套:
①嵌套调用:在一个函数中调用了另一个函数
②嵌套定义:在一个函数内定义了另一个函数
特点:定义在函数内的函数只能在函数内使用,外界不能直接访问
3.名称空间:存储名字与内存地址对应关系的空间
存储名称的空间,名称空间中,名字与内存地址一一对应
内置名称空间:解释器自带的名称与值的对应关系
python解释器启动的时创建,关闭python解释器销毁
全局名称空间:文件级别的名称,除了内置的和函数内的都在全局名称空间
执行py文件时创建,执行完毕时销毁
局部名称空间:只要是函数内的名称就在局部名称空间
调用函数时创建,函数执行完毕就销毁
加载顺序,1.内置,2,全局3.局部
查找顺序,1.局部 2,全局 3,内置
4.作用域:
域指的是区域,范围的意思
全局的名称空间和内置的名称空间,在使用上没什么区别
局部和全局的,内置的,就有区别了,局部定义的只能在局部使用
给三个空间划分范围
全局和内置的可以划分到一个范围内
global全局范围,就是所谓的全局作用域
局部的单独划分为一个范围
local 局部作用域
globals() 查看全局作用域中的内容
dir(globals()["_builtins_"])
locals() 查看作用域中的内容
global明确声明,要使用全局中的age
nonlocal使用闭包函数外部函数变量 nonlocal
明确声明使用上一层中的a,如果上一层没有a,则找找上上层,不能找全局
5.闭包函数:
1.定义在另一个函数内
2.在内部函数中使用外部的名称
函数的作用域在定义时就已经固定好,与调用位置没有关系
在返回这个内容的函数时,不是单纯的返回函数,还把函数中访问到的局部名称一起打包了
相当于将内部函数与访问的数据打包在一起了(数据不包含全局变量)