第11章 命名空间、范围和模块

本章将介绍命名空间、函数和模块的变量范围,以及Python模块(模块是包含函数和类定义的文件)。

Python对象的名称(如变量、类、函数和模块的名称)将在命名空间中收集。模块和类具有与这些对象相同名称的命名空间。这些命名空间是在导入模块或实例化类时创建的。模块的命名空间的生命周期与当前的Python会话一样长。类实例的命名空间的生命周期是直到实例被删除。

函数在执行(调用)时创建了一个本地命名空间。当函数通过常规返回或异常停止执行时,其会被删除。本地命名空间未命名。

命名空间的概念在其上下文中放置一个变量名。例如,有几个名称为sin的函数,它们被各自所属的命名空间区分开,如下面的代码所示:

import math
import scipy
math.sin
scipy.sin

它们确实是不同的,因为scipy.sin是一个通用函数,其接受列表或数组作为输入,其中math.sin只接受浮点数。具有命名空间中所有名称的列表可以通过命令dir(<name of namespace>)来获得,其包含两个特殊名称,即_ _name_ __ _doc_ _。前者是指模块的名称,后者是指其文档字符串,如下所示:

math._ _name_ _ # returns math
math._ _doc_ _ # returns 'This module is always ...'

有一个特殊的命名空间_ _builtin_ _,其中包含Python中可用的名称而不需要任何import。它是一个已被命名的命名空间,但是在引用内置对象时不需要给出其名称,如下所示:

'float' in dir(_ _builtin_ _) # returns True ...

Get Python3.0科学计算指南 now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.