1.
命名空间,不仅仅在python中有,在多数解释性语言中都有这个概念。(暂时不确定是不是所有的语言里都有)
php、xml、c++、java、c#......
定义命名空间的意义:避免标识符发生重名冲突;
命名空间的使用: 解析器组织、重用代码;
2. python中的命名空间
python的命名空间被定义为四层: "LEGB"
L: local; 表示该标识符在一个函数定义中,而且在这个函数里面没有再包含函数的定义。
E: enclosing function; 表示在一个函数定义中,但这个函数里面还包含有函数的定义,其实L层和E层只是相对的。
G: global; 是指一个模块的命名空间,也就是说在一个.py文件中定义的标识符,但不在一个函数中。
B: builtin; 是指python解释器启动时就已经具有的命名空间,之所以叫builtin是因为在python解释器启动时会自动
载入__builtin__模块,这个模块中的list、str等内置函数的就处于B层的命名空间中。
python解释器每次解释python代码的时候会按照LEGB的顺序来查找表示符;标识符的结果呢会以第一个找到的为主。
3. 三条规则
第一,赋值(包括显式赋值和隐式赋值)产生标识符,赋值的地点决定标识符所处的命名空间。
第二,函数定义(包括def和lambda)产生新的命名空间。
第三,python搜索一个标识符的顺序是"LEGB"。
来源:https://www.cnblogs.com/spacepirate/p/5418991.html