分类目录:​​《系统学习Python》总目录​​


模块是最高级别的程序组织单元,它将程序代码和数据封装起来以便再利用,同时提供自包含的命名空间从而避免程序出现变量名冲突。从实际的角度来看,模块往往对应于Python程序文件。每一个文件都是一个模块,并且模块在导入其他模块之后就可以使用被导入模块中定义的名称。模块也可以是使用如C、Java、C#等其他语言编写的扩展包,甚至还可以是在包导入时的文件路径。模块可以用下面两个语句和一个重要的内置函数进行处理:

  • ​import​​:使用户程序(导入者)以一个整体获取一个模块
  • ​from​​:允许用户程序从一个模块文件中获取特定的名称
  • ​imp.reload​​:提供了一种在不终止Python程序的情况下重新载入模块文件代码的方法

简而言之,模块是提供自包含的变量的包(也就是所谓的命名空间)从而将部件组织为系统的一种可行方式。一个模块文件顶层定义的所有变量都变成了被导人的模块对象的属性,而导入给予了对模块的全局作用域中名称的访问权。也就是说,在模块导入时,模块文件的全局作用域变成了模块对象的属性命名空间。最终,Python的模块允许将独立的文件连接成一个更大的程序系统。

更确切地说,模块至少能扮演以下三个角色:

  • 代码重用:模块可以在文件中永久保存代码。不像在Python交互式命令行下输入的代码,当退出Python时就会消失,模块文件中的代码是持续存在的。你可以按照需要任意次数地重新载入和重新运行模块。同样重要的是,模块还是定义变量名的空间,被认作是属性,可以被多个外部的用户程序引用。如果使用得当,模块化编程设计能够将代码按照功能组织成可重用的单元。
  • 系统命名空间的划分:模块也是在Python中最高级别的程序组织单元。尽管它们的本质是变量名的软件包,但作为这种软件包,它们是自足的。除非你显式地导入一个文件,否则你将不会在另一个文件中看到那里面的变量名。类似于函数的局部作用域,这能帮助我们避免程序中的名字冲突。事实上,这一特性是不可避免的,因为所有的一切都“存在于”模块文件中,无论是执行的代码还是创建的对象都隐式地封装在模块之中。正是由于这一点,模块是组织系统组件的原生工具。
  • 实现共享的服务和数据:从操作层面来看,模块对实现系统内共享的组件是很方便的,而且只需要存在一份单独的副本。例如,假设你需要一个被多个函数或文件使用全局对象,那么你可以将它编写在一个模块中以便能被多个用户程序导入。