跳到主要内容

Python 模块

提示
  1. 模块化编程:在 Python 中,我们可以通过模块化方式组织代码,将不同功能的代码分开存储在不同文件中,使代码更整洁、易于维护。
  2. 导入和使用模块:可以使用 import 关键字导入模块,之后可通过模块名和点操作符访问模块中的函数和变量。
  3. 模块导入的灵活性:Python 允许从模块中导入特定的函数或变量,甚至可以重命名模块以简化代码,但避免使用星号 (*) 导入所有名称,以保持代码清晰。

当我们的程序变得越来越大时,它可能包含许多代码行。我们可以使用模块将代码分离到不同的文件中,而不是将所有内容放在一个文件中,这样可以根据它们的功能进行分离。这使得我们的代码更有组织性,也更易于维护。

模块是包含用于执行特定任务的代码的文件。一个模块可能包含变量、函数、类等。让我们看一个例子,

让我们创建一个模块。输入以下内容并将其保存为 example.py

# Python 加法模块
def add(a, b):
result = a + b
return result

在这里,我们在一个名为 example 的模块内定义了一个函数 add()。该函数接收两个数字并返回它们的和。

在 Python 中导入模块

我们可以将一个模块内的定义导入到另一个模块或 Python 的交互式解释器中。

我们使用 import 关键字来做到这一点。要导入我们之前定义的 example 模块,我们在 Python 提示符中输入以下内容。

import example

这不会直接在当前符号表中导入 example 中定义的函数名称。它只导入模块名 example 到那里。

使用模块名,我们可以使用点 . 运算符来访问函数。例如:

addition.add(4,5) # 返回 9

注意

  • Python 有大量的标准模块。你可以查看Python 标准模块的完整列表及其用例。
  • 标准模块可以像我们导入用户定义的模块一样被导入。

导入 Python 标准库模块

Python 标准库包含超过 200 个模块。我们可以根据需要导入一个模块。

假设我们想获得 pi 的值,首先我们导入数学模块并使用 math.pi。例如,

# 导入标准数学模块
import math

# 使用 math.pi 获取 pi 的值
print("pi 的值是", math.pi)

输出

pi 的值是 3.141592653589793

使用重命名导入 Python

在 Python 中,我们还可以通过重命名来导入一个模块。例如,

# 通过重命名导入模块
import math as m

print(m.pi)

# 输出:3.141592653589793

在这里,我们将 math 模块重命名为 m。这在某些情况下可以节省我们的输入时间。

注意,我们的范围内不识别名为 math 的名称。因此,math.pi 是无效的,而 m.pi 是正确的实现。

Python 的 from...import 语句

我们可以从一个模块中导入特定的名称,而不必整个导入该模块。例如,

# 仅从数学模块导入 pi
from math import pi

print(pi)

# 输出:3.141592653589793

在这里,我们只从 math 模块中导入了 pi 属性。

导入所有名称

在 Python 中,我们可以使用以下结构从一个模块中导入所有名称(定义):

# 从标准模块 math 中导入所有名称
from math import *

print("pi 的值是", pi)

在这里,我们已经从数学模块中导入了所有定义。这包括在我们的范围内可见的所有名称,除了以下划线开头的(私有定义)。

使用星号 (*) 符号导入所有内容不是一个好的编程实践

。这可能导致标识符的重复定义。它还会影响我们代码的可读性。

dir() 内置函数

在 Python 中,我们可以使用 dir() 函数列出模块中的所有函数名称。

例如,之前我们在 example 模块中定义了一个函数 add()

我们可以以以下方式在 example 模块中使用 dir

dir(example)

['__builtins__',
'__cached__',
'__doc__',
'__file__',
'__initializing__',
'__loader__',
'__name__',
'__package__',
'add']

在这里,我们可以看到一个排序的名称列表(连同 add)。所有以下划线开头的其他名称都是与模块相关联的默认 Python 属性(非用户定义的)。

例如,__name__ 属性包含模块的名称。

import example

example.__name__

# 输出:'example'

使用 dir() 函数而不带任何参数,我们可以找出当前命名空间中定义的所有名称。

a = 1
b = "hello"

import math

dir()

['__builtins__', '__doc__', '__name__', 'a', 'b', 'math', 'pyscripter']