第五章 python的函数(4.1):命名空间(namespace) ※作用域补充

命名空间在调试代码的时候有很重要的作用,所以这里是一个重点。

什么是命名空间: 命名空间(namespace),顾名思义就是存放名字的地方。假设变量x=1,1存放在内存中,name名字x存在哪里呢? 命名空间正式存放名字x与1绑定关系的地方。

python中有4中命名空间:LEGB

  • locals:函数内部的命名空间,一般包括函数的局部变量以及形式参数。(局部变量的命名空间)
  • enclosing function:在嵌套函数中,外部函数的命名空间。(就是父级函数的命名空间)
  • globals:当前的模块空间,模块就是一些py文件。也就是说,globals()类似全局变量。
  • builtins:内置方法(dir(builtins))

    我们定义的变量肯定会存在上述的命名空间的某一个中。

每一个变量的作用域是由其命名空间所决定的。

查看作用域的方法:globals(),locals()

  • 作用域的查找顺序:
    程序引用变量名的时候,会从当前命名空间开始搜索。搜索的顺序是LEGB: 即 locals --> enclosing function --> globals --> builtins 一层一层的查找,找到了就停止搜索引用该层的变量。如果没有找到,则抛出在NameError的异常。 >其实就是从自己的层开始,由内到外搜索。

猜你喜欢

转载自www.cnblogs.com/py-xiaoqiang/p/11076886.html
今日推荐