Python 模块是由 Python 代码组成的 .py
文件。任何 Python 文件都可以被引用为模块。
一些模块可以通过 Python 标准库获得,因此它们会随着 Python 的安装而安装。其他模块可以通过 Python 的包管理器 pip
安装。此外,你也可以创建自己的 Python 模块,因为模块由 Python 的 .py
文件组成。
本教程将指导你编写 Python 模块,以便在其他编程文件中使用。
你应该已经安装了 Python 3,并在计算机或服务器上设置了编程环境。如果你还没有设置编程环境,你可以参考本地编程环境或服务器编程环境的安装和设置指南,这些指南适用于你的操作系统(Ubuntu、CentOS、Debian 等)。
编写模块就像编写任何其他 Python 文件一样。模块可以包含函数、类和变量的定义,然后可以在其他 Python 程序中使用。
从我们的 Python 3 本地编程环境或基于服务器的编程环境开始,让我们首先创建一个名为 hello.py
的文件,稍后我们将在另一个文件中导入它。
首先,我们将创建一个打印 Hello, World!
的函数:
# 定义一个函数
def world():
print("Hello, World!")
如果我们在命令行中使用 python hello.py
运行程序,什么也不会发生,因为我们还没有告诉程序要做什么。
让我们在相同的目录中创建一个名为 main_program.py
的第二个文件,以便我们可以导入刚刚创建的模块,然后调用该函数。这个文件需要在同一个目录中,这样 Python 才知道在哪里找到模块,因为它不是内置模块。
# 导入 hello 模块
import hello
# 调用函数
hello.world()
因为我们正在导入一个模块,所以我们需要通过点符号引用模块名称来调用函数。
我们也可以使用 from hello import world
导入模块,并直接调用 world()
函数。你可以通过阅读有关在导入模块时使用 from
… import
的方法来了解更多信息。
现在,我们可以在命令行中运行程序:
python main_program.py
当我们运行程序时,我们将收到以下输出:
Hello, World!
为了演示如何在模块中使用变量,让我们在 hello.py
文件中添加一个变量定义:
# 定义一个函数
def world():
print("Hello, World!")
# 定义一个变量
shark = "Sammy"
接下来,我们将在我们的 main_program.py
文件中使用 print()
函数调用变量:
# 导入 hello 模块
import hello
# 调用函数
hello.world()
# 打印变量
print(hello.shark)
再次运行程序后,我们将收到以下输出:
Hello, World!
Sammy
最后,让我们在 hello.py
文件中定义一个类。我们将创建名为 Octopus
的类,具有 name
和 color
属性,以及一个在调用时将打印属性的函数。
# 定义一个函数
def world():
print("Hello, World!")
# 定义一个变量
shark = "Sammy"
# 定义一个类
class Octopus:
def __init__(self, name, color):
self.color = color
self.name = name
def tell_me_about_the_octopus(self):
print("This octopus is " + self.color + ".")
print(self.name + " is the octopus's name.")
现在,我们将在 main_program.py
文件的末尾添加这个类:
# 导入 hello 模块
import hello
# 调用函数
hello.world()
# 打印变量
print(hello.shark)
# 调用类
jesse = hello.Octopus("Jesse", "orange")
jesse.tell_me_about_the_octopus()
一旦我们使用 hello.Octopus()
调用了 Octopus 类,我们就可以在 main_program.py
文件的命名空间中访问类的函数和属性。这使我们可以在最后一行写 jesse.tell_me_about_the_octopus()
而不需要调用 hello
。例如,我们也可以调用类的属性之一,比如 jesse.color
,而不需要引用 hello
模块的名称。
当我们运行程序时,我们将收到以下输出:
Hello, World!
Sammy
This octopus is orange.
Jesse is the octopus's name.
重要的是要记住,尽管模块通常是定义,但它们也可以实现代码。为了演示这一点,让我们重写我们的 hello.py
文件,以便实现 world()
函数:
# 定义一个函数
def world():
print("Hello, World!")
# 在模块内调用函数
world()
我们还删除了文件中的其他定义。
现在,在我们的 main_program.py
文件中,我们将删除除了导入语句之外的每一行:
# 导入 hello 模块
import hello
当我们运行 main_program.py
时,我们将收到以下输出:
Hello, World!
这是因为 hello
模块实现了 world()
函数,然后传递给 main_program.py
,并在 main_program.py
运行时执行。
模块是由定义或代码组成的 Python 程序文件,你可以在其他 Python 程序文件中使用它们。
模块可能对多个编程项目有用,在这种情况下,将模块保留在与特定项目相关联的特定目录中就没有太多意义。
如果你想从与主程序不同的位置使用 Python 模块,你有几个选项。
一种选择是通过使用使用该模块的编程文件来调用模块的路径。这应该被视为一种在开发过程中可以执行的临时解决方案,因为它不会使模块在整个系统范围内可用。
要将模块的路径附加到另一个编程文件中,你将首先在主程序文件中导入 sys
模块以及你希望在程序中使用的任何其他模块。
sys
模块是 Python 标准库的一部分,它提供了系统特定的参数和函数,你可以在程序中使用它来设置你希望实现的模块的路径。
例如,假设我们将 hello.py
文件移动到路径 /usr/<^>sammy<^>/
,而 main_program.py
文件位于另一个目录中。在我们的 main_program.py
文件中,我们仍然可以通过导入 sys
模块,然后将 /usr/<^>sammy<^>/
附加到 Python 用于检查文件的路径中。
import sys
sys.path.append('/usr/sammy/')
import hello
...
只要你正确设置了 hello.py
文件的路径,你就可以在没有任何错误的情况下运行 main_program.py
文件,并收到与上述 hello.py
在同一目录中时相同的输出。
你的第二个选择是将模块添加到 Python 用于检查模块和包的路径。这是一个更加永久的解决方案,使得模块在整个环境范围或系统范围内可用,使这种方法更具可移植性。
要找出 Python 检查的路径,从你的编程环境中运行 Python 解释器:
python3
接下来,导入 sys
模块:
import sys
然后让 Python 打印系统路径:
print(sys.path)
在这里,你将收到至少一个系统路径的一些输出。如果你在编程环境中,你可能会收到几个。你需要寻找当前使用的环境中的路径,但你可能还想将模块添加到你的主系统 Python 路径中。你要寻找的内容类似于:
'/usr/<^>sammy<^>/<^>my_env<^>/lib/python3.5/site-packages'
现在,你可以将 hello.py
文件移动到该目录中。完成后,你可以像往常一样导入 hello
模块:
import hello
...
当你运行程序时,它应该可以顺利完成。
修改模块的路径可以确保你可以访问模块,而不管你在哪个目录中。这在特别是当你有多个项目引用特定模块时非常有用。
编写 Python 模块与编写任何其他 Python .py
文件相同。本教程涵盖了如何在模块中编写定义,在另一个 Python 编程文件中使用这些定义,并介绍了在哪里保留模块以便访问它的选项。