12.4 导入模块

12.4.1 import语句

使用import语句导入模块,它的语法如下所示:

12.4 导入模块 - 图1

也可以在一行内导入多个模块,像这样…

12.4 导入模块 - 图2

但是这样的代码可读性不如多行的导入语句。而且在性能上和生成Python字节代码时这两种做法没有什么不同。所以一般情况下,我们使用第一种格式。

12.4 导入模块 - 图3核心风格:import语句的模块顺序

我们推荐所有的模块在Python模块的开头部分导入。而且最好按照这样的顺序:

  • Python标准库模块

  • Python第三方模块

  • 应用程序自定义模块

然后使用一个空行分割这三类模块的导入语句。这将确保模块使用固定的习惯导入,有助于减少每个模块需要的import语句数目。其他的提示请参考“Python’s Style Guide”, PEP8。

解释器执行到这条语句,如果在搜索路径中找到了指定的模块,就会加载它。该过程遵循作用域原则,如果在一个模块的顶层导入,那么它的作用域就是全局的;如果在函数中导入,那么它的作用域是局部的。

如果模块是被第一次导入,它将被加载并执行。

12.4.2 from-import语句

你可以在你的模块里导入指定的模块属性。也就是把指定名称导入到当前作用域。使用from-import语句可以实现我们的目的,它的语法是:

12.4 导入模块 - 图4

12.4.3 多行导入

多行导入特性是Python 2.4为较长的from-import提供的。从一个模块导入许多属性时,import行会越来越长,直到自动换行,而且需要一个\。下面是PEP 328提供的样例代码:

12.4 导入模块 - 图5

你可以选择使用多行的from-import语句:

12.4 导入模块 - 图6

我们不提倡使用不再流行的from Tkinter import*语句(参考12. 5. 3小节的“核心风格”) 。真正的Python程序员应该使用Python的标准分组机制(圆括号)来创建更合理的多行导入语句:

12.4 导入模块 - 图7

你可以在PEP 328找到更多关于多行导入的内容。

12.4.4 扩展的import语句(as)

有时候你导入的模块或是模块属性名称已经在你的程序中使用了,或者你不想使用导入的名字。可能是它太长不便输入什么的,总之你不喜欢它。这已经成为Python程序员的一个普遍需求:使用自己想要的名字替换模块的原始名称。一个普遍的解决方案是把模块赋值给一个变量:

12.4 导入模块 - 图8

上边的例子中,我们没有使用longmodulename. attribute,而是使用short. attribute来访问相同的对象(from-imoort语句也可以解决类似的问题,参见下面的例子)。不过在程序里一遍又一遍做这样的操作是很无聊的。使用扩展的import,你就可以在导入的同时指定局部绑定名称。如下所示。

12.4 导入模块 - 图9

Python 2. 0加入了这个特性。不过那时“as”还不是一个关键字;Python 2. 6正式把它列为一个关键字。更多关于扩展导入语句的内容请参阅《Python语言参考手册》和PEP 221。