如何在Python3中编写模块
介绍
Python modules 是由 Python 代码组成的 .py
文件。 任何 Python 文件都可以作为模块引用。
某些模块可通过 Python 标准库 获得,因此随 Python 安装一起安装。 其他的可以使用 Python 的包管理器 pip
安装。 此外,您可以创建自己的 Python 模块,因为模块由 Python .py
文件组成。
本教程将指导您编写 Python 模块以在其他编程文件中使用。
先决条件
您应该在您的计算机或服务器上安装 Python 3 并设置编程环境。 如果您没有设置编程环境,您可以参考本地编程环境或服务器上的编程环境适合您的操作的安装和设置指南系统(Ubuntu、CentOS、Debian 等)
编写和导入模块
编写模块就像编写任何其他 Python 文件一样。 模块可以包含函数、类和变量的定义,然后可以在其他 Python 程序中使用。
Info: 要跟随本教程中的示例代码,请通过运行 python3
命令在本地系统上打开 Python 交互式 shell。 然后,您可以通过在 >>>
提示符后添加示例来复制、粘贴或编辑示例。
在我们的 Python 3 本地编程环境或基于服务器的编程环境中,我们首先创建一个文件 hello.py
,稍后我们将导入另一个文件。
首先,我们将 创建一个打印 Hello, World!
的函数 :
你好.py
# Define a function def world(): print("Hello, World!")
如果我们在命令行上用 python hello.py
运行程序,什么都不会发生,因为我们没有告诉程序做任何事情。
让我们在同一目录中创建第二个文件,名为main_program.py
,这样我们就可以导入我们刚刚创建的模块,然后调用该函数。 该文件需要位于同一目录中,以便 Python 知道在哪里可以找到该模块,因为它不是内置模块。
主程序.py
# Import hello module import hello # Call function hello.world()
因为我们正在 导入一个模块 ,所以我们需要通过引用以点表示法的模块名称来调用该函数。
我们可以将模块导入为 from hello import world
并直接调用函数为 world()
。 您可以通过阅读 如何在导入模块时使用 from ... import 来了解有关此方法的更多信息。
现在,我们可以在命令行上运行程序:
python main_program.py
当我们这样做时,我们将收到以下输出:
OutputHello, World!
要了解如何在模块中使用 variables,让我们在 hello.py
文件中添加变量定义:
你好.py
# Define a function def world(): print("Hello, World!") # Define a variable shark = "Sammy"
接下来,我们将在 main_program.py
文件中的 print()
函数中调用该变量:
主程序.py
# Import hello module import hello # Call function hello.world() # Print variable print(hello.shark)
再次运行程序后,我们将收到以下输出:
OutputHello, World! Sammy
最后,让我们在hello.py
文件中也定义一个类。 我们将创建具有 name
和 color
属性的类 Octopus
以及一个在调用时将打印出属性的函数。
你好.py
# Define a function def world(): print("Hello, World!") # Define a variable shark = "Sammy" # Define a class 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
文件的末尾:
主程序.py
# Import hello module import hello # Call function hello.world() # Print variable print(hello.shark) # Call class jesse = hello.Octopus("Jesse", "orange") jesse.tell_me_about_the_octopus()
一旦我们用 hello.Octopus()
调用了 Octopus 类,我们就可以在 main_program.py
文件的命名空间中访问该类的函数和属性。 这让我们可以在最后一行写 jesse.tell_me_about_the_octopus()
而不调用 hello
。 例如,我们还可以在不引用 hello
模块的名称的情况下调用类的属性之一,例如 jesse.color
。
当我们运行程序时,我们将收到以下输出:
OutputHello, World! Sammy This octopus is orange. Jesse is the octopus's name.
重要的是要记住,尽管模块通常是定义,但它们也可以实现代码。 为了看看它是如何工作的,让我们重写我们的 hello.py
文件,以便它实现 world()
函数:
你好.py
# Define a function def world(): print("Hello, World!") # Call function within module world()
我们还删除了文件中的其他定义。
现在,在我们的 main_program.py
文件中,我们将删除除 import 语句之外的每一行:
主程序.py
# Import hello module import hello
当我们运行 main_program.py
时,我们将收到以下输出:
OutputHello, 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 检查文件的路径来导入 hello
模块。
主程序.py
import sys sys.path.append('/usr/sammy/') import hello ...
只要你正确设置了hello.py
文件的路径,就可以正常运行main_program.py
文件,并在hello.py
时收到与上述相同的输出在同一个目录中。
将模块添加到 Python 路径
您拥有的第二个选项是将模块添加到 Python 检查模块和包的路径。 这是一个更持久的解决方案,它使模块在环境范围或系统范围内可用,从而使这种方法更具可移植性。
要找出 Python 检查的路径,请从您的编程环境中运行 Python 解释器:
python3
接下来,导入 sys
模块:
import sys
然后让 Python 打印出系统路径:
print(sys.path)
在这里,您将收到一些带有至少一个系统路径的输出。 如果您在编程环境中,您可能会收到几个。 您需要在当前使用的环境中查找模块,但您可能还想将该模块添加到您的主系统 Python 路径中。 您正在寻找的将与此类似:
Output'/usr/sammy/my_env/lib/python3.5/site-packages'
现在您可以将 hello.py
文件移动到该目录中。 完成后,您可以照常导入 hello
模块:
主程序.py
import hello ...
当你运行你的程序时,它应该完成而没有错误。
修改你的模块的路径可以保证不管你在什么目录下都可以访问模块。 如果您有多个项目引用特定模块,这尤其有用。
结论
编写 Python 模块与编写任何其他 Python .py
文件相同。 本教程介绍了如何在模块中编写定义,在另一个 Python 编程文件中使用这些定义,并讨论了将模块保存在何处以便访问它的选项。
您可以通过阅读 如何在 Python 3 中导入模块来了解有关安装和导入模块的更多信息。