这个很重要,关于这个主题的知识对任何高级Python程序员都很有用。
1.名称空间
名称空间是从名称到对象的映射。名称空间的示例有:一组内置名称(包含abs()等函数和内置异常名称);模块中的全局名称;以及函数调用中的本地名称。在某种意义上,一个对象的属性集也形成了一个名称空间。关于名称空间,需要知道的重要一点是,不同名称空间中的名称之间绝对没有关系。属性可以是只读的或可写的,也可以使用del语句删除可写属性。
名称空间是在不同的时刻创建的,具有不同的生命周期。包含内置名称的名称空间是在Python解释器启动时创建的,不会被删除。模块的全局命名空间是在读入模块定义时创建的;通常,模块命名空间也会持续到解释器退出。解释器的顶层调用执行的语句(从脚本文件中读取或以交互方式执行)被视为名为__main__的模块的一部分,因此它们有自己的全局命名空间。(内置名称实际上也存在于模块中,称为builtins模块。)
函数的本地命名空间在调用函数时创建,在函数返回或引发未在函数内处理的异常时删除。当然,递归调用都有自己的本地名称空间。
2.作用域
作用域是Python程序的一个文本区域,在作用域里可以直接访问名称空间。虽然作用域是静态确定的,但它们是动态使用的。在执行过程中的任何时候,都有3或4个嵌套作用域的命名空间可以直接访问:







网友评论