python命名空间总结
1.命名空间
官方文档:
A namespace is a mapping from names to objects.Most namespaces are currently implemented as Python dictionaries。
命名空间是从名称(name)到对象(object)的映射(map),大多数的命名空间都是通过python字典来实现的。当一个name映射到一个object上时,我们说这个name和这个object有绑定(bind)关系,或者说这个name指向这个object
Python 的名字实际上是⼀个字符串对象,它和所指向的目标对象——起在名字空间中构成⼀一项 {name: object} 关联。globals()
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wBjROLx1-1586426014108)(C:\Users\zhourong\AppData\Roaming\Typora\typora-user-images\1586425003007.png)]
**设计哲学:python中的一切都是对象(object),包括function、module(模块)、class、package本身。用name给每个object起个名字。一个name只能有一个object,一个object可以有多个name。**每一个object、如(module、class、function)一个instance ,都有自己的namespace。namespace是动态创建的,每一个namespace的生存时间也不一样。
删除变量:删除一个变量的意思是从最内部的namespace清除一个name和object的绑定(bind)关系,如果没有其他name和这个对象bind,那么才是真正删除object。
python是一种强类型、动态语言。强类型是指:每一个对象都有一个类型。动态类型是指每个变量都不用声明,可以指向任何类型的对象、或者叫变量为名字(name)更为合适。
如下图所示,相同的对象名称可以存在于多个命名空间中。
一般有三种命名空间:
- 内置名称(built-in names),Python 语言内置的名称,比如函数名 abs、char 和异常名称 BaseException、Exception 等等。
- 全局名称(global names),模块中定义的名称,记录了模块的变量,包括函数、类、其他导入的模块、模块级的变量和常量
- 局部名称(local names),函数中定义的名称,记录了函数的变量、包括函数的参数和局部定义的变量