目录[隐藏][展示]
本次讲座将涵盖 Python 中的模块和包。
它们是以文件的形式组织代码的一种方式,如果您打算使用 Python 构建 Web 应用程序,它们非常重要
模块
Python 中的模块基本上是一个包含一些 Python 代码的文件,我们使用这些代码将代码组织成文件。 把它想象成超市里的部分。 当你去超市时,水果、蔬菜、清洁产品等有不同的部分。你不会看到一个部分包含所有产品。
这与编程中的概念相同。 我们不是用 main.py 中的所有函数和类编写所有代码,而是将代码分解为多个文件。 每个文件称为一个模块。 有了这个,我们的代码不仅可以更好地组织和结构化,而且我们还可以重用我们的代码。 让我们通过一个例子来看看。
让我们定义两个函数来将重量从磅转换为公斤,反之亦然。
def lbs_to_kg(weight):
return weight * 0.45
def kg_to_lbs(weight):
return weight / 0.45
现在,我们可以将这两个函数放在一个单独的模块中,称为“转换器”,然后可以将其导入任何需要这些转换器函数的程序中。 让我告诉你如何做到这一点。
让我们打开我们的项目面板并右键单击该项目并添加一个新文件。 我们将把这个文件称为“Converters.py”。
现在从默认文件中复制代码并将其粘贴到“Converters.py”中。
有了这个,我们已经清理了我们的主模块,它并没有因为不同的功能而臃肿。 随着我们用类编写更多函数,我们将它们放在相应的模块中。 一个模块应该包含所有相关的函数和类。 现在,我们要将转换器模块导入我们的应用程序模块。 为此,请编写 import converters
在顶部没有扩展名“.py”。
我们可以使用类似于方法的点运算符来访问模块的成员。
让我们将 70 公斤转换为磅:
还有另一种用于导入模块的语法。 我们可以从该模块中导入特定功能,而不是导入整个模块。 我们可以输入 from Converters import
并按“控制+空格”显示可用功能列表。 有了这个,我们就可以直接调用这个函数了。
锻炼
这是你的练习。
这与我们讨论的讲座中的一个练习有关“for循环” 我们编写了一个程序来从列表中找出最大的数字
numbers = [8, 3, 6, 10, 5]
max = numbers[0]
for number in numbers:
if number > max:
max = number
print(max)
该代码目前没有组织。 我们没有任何功能或模块,程序写在一个文件中。 这对于小型程序来说是可以的,但是随着程序的增长,您需要将代码正确地组织到类和模块中。 因此,作为本练习的一部分,我希望你编写一个函数,调用它 find_max
. 此函数应获取一个列表并返回该列表中的最大数字。 之后继续把这个函数放在一个单独的模块中,从这里提取它并将它放在一个名为的模块中 utils
. 这个模块应该包含一堆实用功能。 导入 utils
模块进入当前模块并调用 find_max
功能。 最后,得到结果并在终端上打印出来。
这个练习有点挑战性,但很容易做到。
解决方案
首先定义一个函数 find_max
并添加一个名为 numbers 的参数。 在此函数中,编写查找列表中最大数的算法。
def find_max(numbers):
max = numbers[0]
for number in numbers:
if number > max:
max = number
return max
将此代码作为模块保存在文件“utils.py”中。
回到我们的主程序,只需通过两种语法中的任何一种导入模块并执行逻辑即可。
一件事,我需要引起你的注意是被破坏的 max
. 原因是 max
是 Python 中的内置函数,我们正在重新定义它。 所以这是来自 Python编译器 我们不能再使用 max 作为它的内置函数。
Python中的内置模块
Python 带有一个标准库,其中包含几个用于常见任务的模块,例如发送电子邮件、处理日期和时间、生成随机值和密码等。 Python 中已经内置了很多模块,这意味着我们已经有很多可以重用的功能。 你可以找到这些模块 此处.
包基本上是在模块之上组织代码的另一种方式。 一个真正的项目可能包含数百甚至数千个模块,随着时间的推移,我们的目录会因为大量文件而变得臃肿。 因此,更好的方法是将相关模块组织在一个包内,使包成为多个模块的容器。
将一个新目录添加到项目中,并且所有相关模块都添加到该目录中。 举个例子,想想一个商场。 商场里有不同的男装、女装和童装区,就像包裹一样。 每个部分都有不同的区域用于不同种类的产品,如鞋子、T 恤和夹克。 将这些视为模块。
让我们看看如何在 Python 中创建和使用包。
首先,从项目面板中添加一个新目录。 我们称之为“电子商务”。 该软件包将包含与电子商务应用程序相关的所有模块。
它仍然是一个空目录,要将其转换为一个包,我们需要在其中创建一个特殊文件。 在此目录中添加一个新的 python 文件并将该文件命名为“__init__”。 这是 Python 中的一种特殊约定,当 Python 解释器在目录中看到具有此名称的文件时,它会将这个目录视为一个包。
我们还有另一种简洁的方法来创建包。 只需右键单击项目面板并从列表中创建一个 Python 包。 将其命名为“电子商务”,就是这样。 它将自动创建一个目录,其中包含一个名为“__init__”的 Python 文件。
现在,让我们在包中创建一个模块并将其命名为“shipping”。 在这个模块中,让我们创建一个计算运费的简单函数。
def calc_shipping():
print("calc_shipping")
要在我们的主模块中访问这个功能,我们必须通过电子商务包来访问它。 再一次,我们有两种方法来导入这个模块。
在第一种方法中,我们可以导入整个模块,然后像这样独立调用一个函数:
import eCommerce.shipping
eCommerce.shipping.calc_shipping()
但是,使用这种方法,调用此模块的其中一个函数需要在其前面加上 eCommerce.shipping.
这是非常冗长的。 因此,在处理包时,我们经常使用第二种方法并使用 from
语句。
from eCommerce.shipping import calc_shipping
calc_shipping()
如果您在一个模块中有多个功能,您可以通过在它们之间使用逗号将它们全部导入一行。 假设我们的运输模块中有另一个计算税金的函数。 这将像这样导入:
from eCommerce.shipping import calc_shipping, calc_tax
您还可以导入单个模块并保留函数以在程序的稍后阶段调用。 让我们导入模块 shipping 然后使用点运算符调用函数 calc_shipping.
from eCommerce import shipping
shipping.calc_shipping()
包起来!
包和模块在 Python 中非常重要。 特别是当你想使用像 Django 这样用于构建的框架时 网络应用 用 Python。 我们将在另一门 Python 课程中研究 Django。
这是本系列的最后一次常规讲座。 下一节课将偏离我们通常的格式,我们将学习 Python 中的一些重要用例。 这将标志着本系列的结束,我们将继续我们的下一个 Python 系列。 请继续关注。
发表评论