这将是Python复习系列中的最后一篇教程。 当然,除非我将您带入编程的下一个层次,即使用模块 ,否则在完成本系列文章之前,这些模块在处理非常规的编程任务时被认为是基础知识。
大多数情况下,非平凡的编程任务意味着包含许多代码行的长程序。 当模块试图将这些复杂的程序分解为可管理的块并实现代码重用时,它们就派上用场了。 这样,通过导入该模块,您也可以随时使用代码。 您还可以通过模块进行管理,从而解决在不同程序中多次复制某些功能的问题。
让我们继续学习本教程的内容,看看如何在Python中使用模块。
Python中的模块
创建Python程序时,您曾经将它们放在以.py
结尾的某些源文件中。 Python中的模块就是以这种方式创建的。 也就是说,它们是以.py
结尾的源文件,位于Python能够找到它们的目录中(即当前工作目录或sys.path中列出)。
模块通常包含彼此相关的语句。 如上所述,我们可以随时使用模块。 使用模块意味着使用存储在该模块中的代码(即变量,函数)。 提出并使用这种代码的过程称为导入 。
创建模块
用Python创建模块非常简单。 假设我们要创建一个可以打印某人姓名的模块。 使用您喜欢的编辑器键入以下代码,并将其另存为myname.py
。 这将是您的模块名称( .py
部分除外),该部分将分配给全局变量__name__
。
def print_name(n):
print 'Hi', n
导入模块
如果您对使用上述模块中的代码感兴趣的另一个Python文件,我们将使用import
关键字导入模块,如下所示:
import myname
name.print_name('Abder')
该脚本的输出为: Hi Abder
。
确保Python能够找到导入的文件。 例如,将其放置在与使用import
的Python文件相同的目录中。
如您所见,导入模块使我们能够通过从外部文件(即模块)向程序添加新功能来增强程序。
但是,幕后发生了什么? import
模块时,Python会编译该模块并生成一个.pyc
文件,并且仅当.py
比.pyc
文件新时,才重新编译程序。
让我们再举一个例子,但是这次使用Python内置模块。 让我们选择数学模块。 在此示例中,对于一个传递的数字,我们想要找到上限 (大于或等于该数字的最小整数值), 下限 (小于或等于该数字的最大整数值)以及该数字的绝对值 。 该程序的Python脚本如下所示:
import math
x = 4.7
print 'The ceiling of ' + str(x) + ' is: ' + str(math.ceil(x))
print 'The floor of ' + str(x) + ' is: ' + str(math.floor(x))
print 'The absolute value of ' + str(x) + ' is: ' + str(math.fabs(x))
如果运行此脚本,则输出应如下所示:
The ceiling of 4.7 is: 5.0
The floor of 4.7 is: 4.0
The absolute value of 4.7 is: 4.7
因此,我们能够对数字应用不同的运算,而无需为每个运算编写代码,而是通过重用 math
模块中已经可用的函数。 这很有帮助,不是吗?
您可能想知道,我们是否应该始终使用math.function()
表示法? 我们不能在没有模块名称(例如math
)的情况下立即使用该函数吗? 是的,您可以使用以下语法进行import
:
from math import *
这样,您可以调用先前的函数( ceil(x)
, floor(x)
和fabs(x)
),而无需在模块名称前加上math
。
模块作为脚本
让我们回到简单的模块myname.py
:
def print_name(n):
print 'Hi', n
我们能否将此模块视为独立的(主)脚本,我们可以直接运行该模块并将其从命令行传递给参数? 例如,如果您在命令行中键入以下内容,将会发生什么?
python myname.py 'Abder'
没有! 尝试一下-您将不会获得任何输出。
为了能够将模块作为脚本运行,我们必须设置__name__ = '__main__
'。 因此,模块myname
现在将如下所示:
def print_name(n):
print 'Hi', n
if __name__ == '__main__':
import sys
print_name(sys.argv[1])
如果在终端python myname.py 'Abder'
运行此命令,则应获得以下输出:
Hi Abder
配套
与模块紧密相关的一个重要概念是软件包的概念 。 包是模块的集合。 换句话说,当模块是文件时,包是目录/文件夹。 这是一种通过使用点分的模块名称来构造模块的方法。 因此,如果您看到一个类似于以下内容的import
语句:
import university.department
这意味着我们在university
包中有一个称为department
的模块。
如我们所见,使用模块使我们能够将复杂的程序拆分为可管理的块,从而更容易跟踪程序中的任何错误,更好地了解其功能并实现可重用性。
至此,我们进入了Python复习系列的结尾。 在本系列文章中,我们学习了为了在Python编程语言中进一步发展而需要掌握的基础知识和必要概念。 我们已经了解了列表 , 字典和元组的概念。 我们还学习了如何通过条件( 链接到Python条件 )进行决策,以及如何通过循环( 链接到Python循环 )进行决策。 我们还学习了如何使用函数 ,创建类和实例化它们( 即对象)以及将我们的工作打包在模块中。
翻译自: https://code.tutsplus.com/tutorials/a-smooth-refresher-on-pythons-modules--cms-25607