如何在Python 3中编写模块

本教程将指导您编写Python模块,供您或其他人在您的程序文件中使用。

介绍

Python 模块.py文件,由Python代码组成。任何Python文件都可以作为模块引用。 一些模块可通过Python标准库获得 ,因此会随您的Python安装一起安装。 其他可以安装 Python的包管理器pip 。 此外,您可以创建自己的Python模块,因为模块由Python .py文件组成。 本教程将指导您编写Python模块,以在其他编程文件中使用。

编写和导入模块

编写模块就像写任何其他Python文件。模块可以包含函数,类和变量的定义,然后可以在其他Python程序中使用。 从我们的Python 3 本地编程环境基于服务器的编程环境 ,让我们开始创建一个文件hello.py ,我们将以后导入到另一个文件。 首先,我们将创建一个打印Hello, World!的函数Hello, World!
hello.py
# Define a function
def world():
    print("Hello, World!")
如果我们在命令行运行程序与python hello.py没有什么会发生,因为我们没有告诉程序做任何事情。 让我们在同一目录创建一个名为main_program.py的第二个文件以便我们可以导入刚创建的模块,然后调用该函数。此文件需要在同一目录中,以便Python知道在哪里找到模块,因为它不是内置模块。
main_program.py
# Import hello module
import hello

# Call function
hello.world()
因为我们正在导入一个模块 ,所以我们需要通过引用以点号表示的模块名称来调用该函数。 我们可以from hello import world导入模块,并将该函数直接调用为world() 。 您可以通过阅读如何使用from ... import模块时了解有关此方法的更多信息。 现在,我们可以在命令行上运行该程序:
python main_program.py
当我们这样做,我们将收到以下输出:
Hello, World!
要看看我们如何在模块中使用变量,让我们在hello.py文件中添加一个变量定义:
hello.py
# Define a function
def world():
    print("Hello, World!")

# Define a variable
shark = "Sammy"
接下来,我们将在main_program.py文件中的print()函数中调用变量:
main_program.py
# Import hello module
import hello

# Call function
hello.world()

# Print variable
print(hello.shark)
一旦我们再次运行该程序,我们将收到以下输出:
Hello, World!
Sammy
最后,让我们在hello.py文件中定义一个类。 我们将创建类name Octopusnamecolor属性和一个函数,打印出属性时调用。
hello.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文件的末尾:
main_program.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 。 我们还可以,例如,调用类的属性,如jesse.color而不引用hello模块的名称。 当我们运行程序时,我们将收到以下输出:
Hello, World!
Sammy
This octopus is orange.
Jesse is the octopus's name.
重要的是要记住,虽然模块通常是定义,他们也可以实现代码。要看看这是如何工作的,让我们重写我们的hello.py文件,以便它实现world()函数:
hello.py
# Define a function
def world():
    print("Hello, World!")

# Call function within module
world()
我们也删除了文件中的其他定义。 现在,在main_program.py文件中,我们将删除除import语句之外的每一行:
main_program.py
# Import hello module
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文件中,我们仍然可以导入hello模块,方法是导入sys模块,然后将/usr/ sammy /附加到Python检查文件的路径。
main_program.py
import sys
sys.path.append('/usr/sammy/')

import hello
...
只要正确设置hello.py文件的路径,您就可以运行main_program.py文件而没有任何错误,并且在hello.py位于同一目录时接收与上面相同的输出。

将模块添加到Python路径

第二个选项是将模块添加到Python检查模块和包的路径。这是一个更永久的解决方案,使模块可在环境范围或系统范围内使用,使此方法更便携。 要找出Python检查什么路径,请从编程环境运行Python解释器:
python
接下来,导入sys模块:
import sys
然后让Python打印出系统路径:
print(sys.path)
在这里,您将收到一些至少有一个系统路径的输出。如果你在编程环境中,你可能会收到几个。您将需要查找当前正在使用的环境中的模块,但是您可能还想将模块添加到主系统Python路径中。你正在寻找什么将类似于:
'/usr/sammy/my_env/lib/python3.5/site-packages'
现在,您可以将您的hello.py文件移动到该目录。 一旦完成,您可以照常导入hello模块:
main_program.py
import hello
...
当你运行你的程序,它应该完成没有错误。 修改模块的路径可以确保您可以访问模块,而不管您所在的目录是什么。如果有多个项目引用特定模块,这是非常有用的。

结论

编写Python模块与编写任何其他Python .py文件相同。本教程介绍了如何在模块中编写定义,在另一个Python编程文件中使用这些定义,并讨论了保留模块的选项以便访问它。 您可以通过阅读如何在Python 3中导入模块来了解有关安装和导入模块的更多信息。