函数的命名空间和作用域、闭包(笔记)

命名空间

  1. 内置命名空间——python解释器
    python解释器一启动就可以使用的名字存储在内置命名空间中,内置的名字在启动解释器的时候被加载进内存
  2. 全局命名空间——我们写的代码但不是函数中的代码
    是在程序从上到下被执行的过程中依次加载进内存的,放置了我们设置的所有变量名和函数
  3. 局部命名空间——函数
    函数内部定义的名字,当调用函数的时候才会调用这个名称空间,随着函数执行的结束这个命名空间就又消失了
1. 在局部:可以使用全局、内置命名空间中的名字
2. 在全局:可以使用内置空间中的名字,但不能使用局部空间的命名
3. 在内部:不能使用全局和局部的命名

作用域

  • 全局作用域:内置和全局空间中的名字
  • 局部作用域:函数(局部空间中的名字)
  • globals
    永远打印全局变量
  • locals()
    输出什么,根据locals所在的位置在全局就输出全局在局部就输出局部
  • global
    但不建议用global用return然后接收返回值解决

作用域链 :

小范围用变量的时候,先从自己的名字空间找,
找不到就一层一层向外层找,知道找到为止。
找不到就报错。

函数的嵌套调用和嵌套定义

定义在函数内部的函数不能被外界直接调用
内部函数可以使用外部的变量

函数名的本质

就是一串内存地址
可以赋值、可以作为容器类型的元素、函数的参数和返回值 —— 第一类对象

闭包 : 内部函数使用外部函数的变量

def outer():
    a = 1
    def inner():
        print(a)
    return inner

i = outer()
i()
posted @ 2020-11-13 08:59  北~屿  阅读(60)  评论(0)    收藏  举报