Python3 命名空间和作用域
目录
一、命名空间
(一)简介
1、命名空间(Namespace)是从名称到对象的映射,大部分的命名空间都是通过 Python 字典来实现的。
2、命名空间提供了在项目中避免名字冲突的一种方法。
3、各个命名空间是独立的,没有任何关系的,所以一个命名空间中不能有重名,但不同的命名空间是可以重名而没有任何影响。
4、我们举一个计算机系统中的例子,一个文件夹(目录)中可以包含多个文件夹,每个文件夹中不能有相同的文件名,但不同文件夹中的文件可以重名。
(二)一般有三种命名空间
1、内置名称(built-in names)
2、全局名称(global names)
3、局部名称(local names)
(三)命名空间查找顺序:
(四)命名空间的生命周期
二、作用域
(一)简介
(二)Python 的作用域有四种:
1、L(Local)
2、E(Enclosing)
3、G(Global)
4、B(Built-in)
(三)规则顺序:L –> E –> G –> B。
1、在局部找不到,便会去局部外的局部找(例如闭包),再找不到就会去全局找,再者去内置中找。
2、内置作用域是通过一个名为 builtin 的标准模块来实现的,但是这个变量名自身并没有放入内置作用域内,所以必须导入这个文件才能够使用它。
3、在Python3.0中,可以使用以下的代码来查看到底预定义了哪些变量:
4、Python 中只有模块(module),类(class)以及函数(def、lambda)才会引入新的作用域,其它的代码块(如 if/elif/else/、try/except、for/while等)是不会引入新的作用域的,也就是说这些语句内定义的变量,外部也可以访问,如下代码:
(四)全局变量和局部变量
1、定义在函数内部的变量拥有一个局部作用域,定义在函数外的拥有全局作用域。
2、局部变量只能在其被