如何在Python中编写一个自定义模块


如何在Python中编写一个自定义模块

你是否想知道如何编写你自己的Python自定义模块,类似于著名的Python库,如NumPy或Pandas?

在我之前为LearnPython.com撰写的文章中,我们了解了Python的自定义类。通过 Kateryna’关于 Python 函数的文章,你现在已经具备了在 Python 中实现你自己的自定义模块所需的知识。

如果你还想知道为什么要在 2021 年学习 Python,请查看 Rebecca’关于这个主题的优秀文章。

在这篇文章中,我们探讨什么是 Python 自定义模块,以及如何在 Python 中编写模块。

什么是 Python 中的自定义模块?

模块是一个由定义或代码组成的 Python 程序文件,你可以在其他 Python 程序文件中利用。它们是用 Python 写的 .py 文件。

你可以自己写一个 Python 模块。它们可以包含可以在其他Python程序中使用的函数、类和变量的定义。

为什么要在Python中编写自定义模块?

在Python中编写自定义模块有助于将程序的大部分分解成更小、更容易管理和组织的文件。

例如,我们可以将我们使用的函数存储在一个 Python 自定义模块中,并根据需要导入,而不是一次又一次地复制和粘贴到不同的程序中。它被保存为 circle_area.py,包含一个计算圆的面积的函数:

# circle_area.py

# 定义一个函数

def area_of_circle(r):

 pi = 3.14 area = pi * (r * r) return area

然后,我们打开另一个名为 main.py 的文件,在其中运行我们的函数,像这样:

# main. py

# 导入 circle_area 模块

import circle_area

# 调用函数print("Area of circle = %.6f" % circle_area.area_of_circle(7))

由于我们引用的是一个模块,我们需要用点符号引用模块名称来调用函数。

当我们在控制台中运行 main.py 脚本时,我们得到如下输出:

Area of circle = 153.860000

在上面的例子中,我们导入了整个模块。另外,我们可以只导入我们程序所需的函数。在这种情况下,我们将只导入 area_of_circle() 方法:

from circle_area import area_of_circle

我们也可以通过重命名来导入一个模块:

import circle_area as ca

这可以节省输入时间。

我们也可以用星号(*)符号导入一个模块的所有定义,比如:

f circle_area import *

然而,这并不是一个好的编程实践,因为它可能导致重复的定义,使代码的可读性降低。例如,我更新了之前的 circle_area.py 模块,增加了一个名为 coolpy 的变量:

# circle_area.py

# 定义一个函数

def area_of_circle(r):

 pi = 3. 14 area = pi * (r * r) return area

# 定义一个变量

coolpy = "LearnPython.com is cool!"

然后我们从main.py文件中打印它:

# 导入 circle_area 模块

import circle_area

# 调用函数

print("圆的面积 = %. 6f" % circle_area.area_of_circle(7))

# 打印变量

print(circle_area.coolpy)

这给了我们以下输出:

Area of circle = 153.860000LearnPython.com is cool!

在我之前关于如何在 Python 中编写自定义类的文章基础上,我们还可以在我们的自定义 Python 模块中添加类。为了清楚起见,我创建了一个保存为 pypok.py 的新模块,其中包含我之前使用的 Pokemon 类:

# pypok.py

# 定义一个 Pokemon 类:

 def __init__(self, power, level, names):

 self.power = power

 self.level = level

 self. names = names

 def __repr__(self):

 return (f'Pokemon({self.power}, ' f'{self.level}, ' f'{self.names})')

 def total_damage(self):

 return self.damage(self.power, self.level)

 @staticmethod

 def damage(power, level):

 return (power * level * 2) / 50

我们现在把这个类加入main.py。

# main.py

# 导入 circle_area 和 pypok 模块

import circle_areaimport pypok

# 调用函数

print("Area of circle = %.6f" % circle_area.area_of_circle(7))

# 打印变量

print( circle_area. coolpy)

# Call the classsquirtle = pypok.Pokemon(20, 8, "Squirtle")

print("Squirtle inflicts", squirtle.total_damage(), "point of damage!")

运行我们的main.py脚本返回以下输出:

Area of circle = 153.860000LearnPython.com is cool!Squirtle inflicts 6。4点伤害!

一旦我们调用了之前定义的自定义类,我们就可以在main.py文件’的命名空间内访问该类的函数和属性。

虽然我们可以编写自定义模块来定义函数,但我们也可以编写模块来实现代码。

# circle_area.py

# 定义一个函数

def area_of_circle(r):

 pi = 3. 14 area = pi * (r * r) return area

# 在模块内调用函数 print(area_of_circle(7))

我们更新main.py脚本,删除除模块导入行以外的所有内容:

# main.py

# 导入 circle_area 模块

import circle_area

现在,我们可以运行脚本并得到以下输出:

153.86

如你所见,我们main.py文件中一行导入就足以得到输出了。虽然这确实有效,但你应该避免这种解决方案。除了让 Python 知道新的对象之外,导入不应该再做任何事情。毕竟,你不希望在需要之前进行繁重的计算。

最好尽可能地保持模块的通用性,以使它们可以重复使用,并避免重复我们的工作。项目特定的变量应该保存在通用文件中,比如main.py.

在Python中编写自定义模块!

我希望这篇文章让你对如何在Python中编写模块有一个很好的了解。不要犹豫,玩玩上面的片段,写写你自己的模块。

另外,我鼓励你思考你的编程实践。你经常使用哪些函数或类?将它们存储在你的 Python 自定义模块中可能是一个很好的做法,可以节省时间,使你的代码更可读,更容易维护。

如果你正在寻找一个在线 Python 资源列表,Dorota 会支持你,她有一个学习 Python 的在线资源列表。最后但并非最不重要的是,如果你想了解更多关于这一切并提高你的Python技能,请查看我们的Python编程轨道。它为你提供了一个路线图,帮助你更快地实现你的目标!


本文标签

热门标签

会员评论