如何在Python3中导入模块

来自菜鸟教程
跳转至:导航、​搜索

介绍

Python编程语言自带多种内置函数。 其中有几个常见的功能,包括:

  • print() 打印表达式
  • abs() 返回数字的绝对值
  • int() 将另一种数据类型转换为整数
  • len() 返回序列或集合的长度

然而,这些内置功能是有限的,我们可以利用模块来制作更复杂的程序。

Modules 是由 Python 代码组成的 Python .py 文件。 任何 Python 文件都可以作为模块引用。 名为 hello.py 的 Python 文件的模块名称为 hello,可以将其导入其他 Python 文件或在 Python 命令行解释器上使用。 您可以通过阅读 如何在 Python 3 中编写模块来了解如何创建自己的模块。

模块可以定义函数变量,您可以在其他Python .py文件中或通过Python命令行解释器引用它们。

在 Python 中,使用 import 语句访问模块。 当你这样做时,你执行模块的代码,保持定义的范围,以便你当前的文件可以使用这些。

例如,当 Python 导入一个名为 hello 的模块时,解释器将首先搜索一个名为 hello 的内置模块。 如果未找到内置模块,Python 解释器将在从 sys.path 变量接收的目录列表中搜索名为 hello.py 的文件。

本教程将引导您检查和安装模块、导入模块和别名模块。

先决条件

您应该在您的计算机或服务器上安装 Python 3 并设置编程环境。 如果您没有设置编程环境,您可以参考本地编程环境或服务器上的编程环境适合您的操作的安装和设置指南系统(Ubuntu、CentOS、Debian 等)

检查和安装模块

Python 标准库 中内置了许多模块,其中包含许多提供对系统功能的访问或提供标准化解决方案的模块。 Python 标准库是每个 Python 安装的一部分。

Info: 要跟随本教程中的示例代码,请通过运行 python3 命令在本地系统上打开 Python 交互式 shell。 然后,您可以通过在 >>> 提示符后添加示例来复制、粘贴或编辑示例。


要检查这些 Python 模块是否准备就绪,请进入本地 Python 3 编程环境或基于服务器的编程环境,并在命令行中启动 Python 解释器,如下所示:

python

在解释器中,您可以运行 import 语句以确保给定模块已准备好被调用,如下所示:

import math

由于 math 是一个内置模块,你的解释器应该在没有反馈的情况下完成任务,返回提示。 这意味着您无需执行任何操作即可开始使用 math 模块。

让我们使用您可能尚未安装的模块运行 import 语句,例如 2D 绘图库 matplotlib

import matplotlib

如果 matplotlib 未安装,您将收到如下错误:

OutputImportError: No module named 'matplotlib'

您可以使用 CTRL + D 停用 Python 解释器,然后使用 pip 安装 matplotlib

接下来,我们可以使用pip来安装matplotlib模块:

pip install matplotlib

安装完成后,您可以在 Python 解释器中使用 import matplotlib 导入 matplotlib,它会正确完成。

导入模块

要使用模块中的功能,您需要使用 import 语句导入模块。

import 语句由 import 关键字和模块名称组成。

在 Python 文件中,这将在代码顶部、任何 shebang 行或一般注释下声明。

因此,在 Python 程序文件 my_rand_int.py 中,我们将导入 random 模块以这种方式生成随机数:

my_rand_int.py

import random

当我们导入一个模块时,我们在当前程序中将它作为一个单独的命名空间提供给我们。 这意味着我们必须用点表示法来引用函数,如 [module].[function]

在实践中,以 random 模块为例,这可能看起来像一个函数,例如:

  • random.randint() 调用函数返回一个随机整数,或
  • random.randrange() 调用函数返回指定范围内的随机元素。

让我们创建一个 for 循环 来展示我们如何在 my_rand_int.py 程序中调用 random 模块的函数:

my_rand_int.py

import random


for i in range(10):
    print(random.randint(1, 25))

这个小程序首先在第一行导入 random 模块,然后进入一个 for 循环,该循环将处理 10 个元素。 在循环中,程序将打印一个 1 到 25(含)范围内的随机整数。 整数 125 作为其参数传递给 random.randint()

当我们使用 python my_rand_int.py 运行程序时,我们将收到 10 个随机整数作为输出。 因为这些是随机的,所以每次运行程序时可能会得到不同的整数,但它们会生成如下内容:

Output6
9
1
14
3
22
10
1
15
9

整数不应低于 1 或高于 25。

如果您想使用多个模块中的函数,可以通过添加多个 import 语句来实现:

my_rand_int.py

import random
import math

您可能会看到导入多个模块的程序用逗号分隔它们——如在 import random, math 中——但这与 PEP 8 样式指南 不一致。

为了利用我们的附加模块,我们可以将 math 中的常量 pi 添加到我们的程序中,并减少打印出的随机整数的数量:

my_rand_int.py

import random
import math


for i in range(5):
    print(random.randint(1, 25))

print(math.pi)

现在,当我们运行我们的程序时,我们将收到如下所示的输出,其中 pi 的近似值作为我们的最后一行输出:

Output18
10
7
13
10
3.141592653589793

import 语句允许您将一个或多个模块导入您的 Python 程序,让您利用这些模块中构造的定义。

使用 fromimport

要在程序的命名空间中引用模块中的项,可以使用 from ... import 语句。 当您以这种方式导入模块时,您可以按名称而不是通过点符号来引用函数

在此构造中,您可以指定要直接引用的定义。

在其他程序中,您可能会看到 import 语句通过使用星号 (*) 作为通配符来引用模块中定义的所有内容,但 PEP 8 不鼓励这样做

让我们首先回顾一下从 random 模块导入一个特定函数 randint()

my_rand_int.py

from random import randint

在这里,我们首先调用 from 关键字,然后为模块调用 random。 接下来,我们使用 import 关键字并调用我们想要使用的特定函数。

现在,当我们在程序中实现这个函数时,我们将不再用点表示法将函数写为 random.randint() 而是只写为 randint()

my_rand_int.py

from random import randint


for i in range(10):
    print(randint(1, 25))

当您运行该程序时,您将收到与我们之前收到的类似的输出。

使用 from ... import 构造允许我们在程序的命名空间中引用模块的已定义元素,从而避免使用点符号。

别名模块

可以使用 as 关键字在 Python 中修改模块名称及其函数。

您可能想要更改名称,因为您已经在程序中为其他东西使用了相同的名称,您导入的另一个模块也使用该名称,或者您可能想要缩写一个您经常使用的较长名称。

该语句的构造如下所示:

import [module] as [another_name]

让我们在我们的my_math.py程序文件中修改math模块的名称。 我们将 math 的模块名称更改为 m 以便缩写。 我们修改后的程序将如下所示:

my_math.py

import math as m


print(m.pi)
print(m.e)

在程序中,我们现在将 pi 常量称为 m.pi 而不是 math.pi

对于某些模块,使用别名是司空见惯的。 matplotlib.pyplot 模块的官方文档 要求使用 plt 作为别名:

import matplotlib.pyplot as plt

这允许程序员将较短的字 plt 附加到模块内可用的任何函数中,如 plt.show()。 您可以在我们的“如何使用 matplotlib 教程 在 Python 3 中绘制数据”中看到这个别名导入语句的使用。

结论

当我们导入模块时,我们能够调用未内置于 Python 中的函数。 有些模块作为 Python 的一部分安装,有些我们将通过 pip 安装。

在利用现有代码时,使用模块可以让我们的程序更加健壮和强大。 我们还可以为我们自己和其他程序员在未来的程序中使用我们自己的模块