随着程序变得越来越大,它可能包含许多行代码。与其将所有内容放在单个文件中,我们可以使用模块根据功能将代码分隔到不同的文件中。这使得我们的代码结构化且更易于维护。
模块是包含执行特定任务代码的文件。一个模块可能包含变量、函数、类等。我们来看一个例子:
让我们创建一个模块。输入以下内容并将其保存为 example.py
。
# Python Module addition
def add(a, b):
result = a + b
return result
在这里,我们在名为 example
的模块中定义了一个函数 add()
。该函数接受两个数字并返回它们的和。
在 Python 中导入模块
我们可以将模块中的定义导入到另一个模块或 Python 的交互式解释器中。
我们使用 import
关键字来完成此操作。要导入我们之前定义的模块 example
,我们在 Python 提示符中输入以下内容。
import example
这并不会将 example
中定义的函数名称直接导入到当前的符号表中。它只导入模块名称 example
到那里。
使用模块名称,我们可以通过点 .
运算符访问函数。例如
example.add(4,5) # returns 9
注意:
- Python 有大量的标准模块。你可以查看Python 标准模块的完整列表及其用例。
- 标准模块的导入方式与我们导入用户自定义模块的方式相同。
导入 Python 标准库模块
Python 标准库包含超过 200 个模块。我们可以根据需要导入模块。
假设我们想获取 pi
的值,我们首先导入 math 模块并使用 math.pi
。例如,
# import standard math module
import math
# use math.pi to get value of pi
print("The value of pi is", math.pi)
输出
The value of pi is 3.141592653589793
Python 导入时重命名
在 Python 中,我们也可以通过重命名来导入模块。例如,
# import module by renaming it
import math as m
print(m.pi)
# Output: 3.141592653589793
在这里,我们将 math
模块重命名为 m
。这在某些情况下可以节省我们输入时间。
请注意,名称 math
在我们的作用域中无法识别。因此,math.pi
是无效的,而 m.pi
才是正确的实现。
Python 的 from...import 语句
我们可以从模块中导入特定的名称,而无需导入整个模块。例如,
# import only pi from math module
from math import pi
print(pi)
# Output: 3.141592653589793
在这里,我们只从 math
模块导入了 pi
属性。
导入所有名称
在 Python 中,我们可以使用以下构造从模块导入所有名称(定义)
# import all names from the standard module math
from math import *
print("The value of pi is", pi)
在这里,我们从数学模块中导入了所有定义。这包括我们作用域中所有可见的名称,除了那些以下划线开头的名称(私有定义)。
用星号 (*) 符号导入所有内容不是一个好的编程习惯。这可能导致标识符的重复定义。它还会降低我们代码的可读性。
dir() 内置函数
在 Python 中,我们可以使用 dir() 函数来列出模块中的所有函数名称。
例如,我们之前在模块 example
中定义了一个函数 add()
。
我们可以通过以下方式在 example
模块中使用 dir
print(dir(example))
['__builtins__',
'__cached__',
'__doc__',
'__file__',
'__initializing__',
'__loader__',
'__name__',
'__package__',
'add']
在这里,我们可以看到一个排序后的名称列表(以及 add
)。所有其他以下划线开头的名称都是与模块相关的默认 Python 属性(非用户定义)。
例如,__name__
属性包含模块的名称。
import example
example.__name__
# Output: 'example'
所有在当前命名空间中定义的名称都可以通过不带任何参数的 dir()
函数找到。
a = 1
b = "hello"
import math
print(dir())
['__builtins__', '__doc__', '__name__', 'a', 'b', 'math', 'pyscripter']