1. 首页
  2. 技术文章

21、Python模块

在本文中,您将学习在Python中创建和导入自定义模块。此外,您还将找到不同的技术来导入和使用Python中的自定义模块和内置模块。

Python中的模块是什么?

模块是指包含Python语句和定义的文件。

包含Python代码的文件,例如:example.py,称为模块,其模块名称为example

我们使用模块将大型程序分解为可管理的小型文件。此外,模块提供了代码的可重用性。

我们可以在模块中定义最常用的函数并将其导入,而不是将其定义复制到其他程序中。

让我们创建一个模块。输入以下内容并将其另存为example.py

# Python Module example

def add(a, b):
   """This program adds two
   numbers and return the result"""

   result = a + b
   return result

在这里,我们在名为的模块内定义了一个函数 。该函数接受两个数字并返回它们的总和。add()example


如何在Python中导入模块?

我们可以将模块内部的定义导入另一个模块或Python中的交互式解释器。

我们使用import关键字来做到这一点。要导入我们先前定义的模块example,我们在Python提示符下输入以下内容。

>>> import example

这不会example直接在当前符号表中导入定义的函数名称。它仅在example此处导入模块名称。

使用模块名称,我们可以使用点.运算符访问该函数。例如:

>>> example.add(4,5.5)
9.5

Python有大量的标准模块。您可以查看Python标准模块及其用例的完整列表。这些文件位于Python安装位置内的Lib目录中。

可以像导入用户定义的模块一样导入标准模块。

有多种导入模块的方法。它们在下面列出。


Python导入语句

我们可以使用该import语句导入模块,并如上所述使用点运算符访问其中的定义。这是一个例子。

# import statement example
# to import standard module math

import math
print("The value of pi is", math.pi)

运行该程序时,输出为:

The value of pi is 3.141592653589793

重命名导入

我们可以通过重命名模块来导入模块,如下所示:

# import module by renaming it

import math as m
print("The value of pi is", m.pi)

我们已将math模块重命名为m。在某些情况下,这可以节省我们的键入时间。

请注意,该名称math在我们的范围内无法识别。因此,math.pi是无效的,并且m.pi是正确的实现。


Python from … import语句

我们可以从模块导入特定名称,而无需整体导入模块。这是一个例子。

# import only pi from math module

from math import pi
print("The value of pi is", pi)

在这里,我们仅从模块导入了pi属性math

在这种情况下,我们不使用点运算符。我们还可以如下导入多个属性:

>>> from math import pi, e
>>> pi
3.141592653589793
>>> e
2.718281828459045

导入所有名称

我们可以使用以下结构从模块导入所有名称(定义):

# import all names from the standard module math

from math import *
print("The value of pi is", pi)

在这里,我们从math模块中导入了所有定义。这包括我们范围内所有可见的名称,但以下划线(私有定义)开头的名称除外。

导入带有星号(*)符号的所有内容都不是一种好的编程习惯。这可能会导致标识符重复定义。这也会影响我们代码的可读性。


导入模块时,Python会在多个位置进行检查。解释器首先寻找一个内置模块。然后(如果未找到内置模块),Python将查找在中定义的目录列表sys.path。搜索按此顺序进行。

  • 当前目录。
  • PYTHONPATH (带有目录列表的环境变量)。
  • 依赖于安装的默认目录。
>>>导入系统
>>> sys.path
['',
'C:\\ Python33 \\ Lib \\ idlelib',
'C:\\ Windows \\ system32 \\ python33.zip',
'C:\\ Python33 \\ DLLs',
'C:\\ Python33 \\ lib',
'C:\\ Python33',
'C:\\ Python33 \\ lib \\ site-packages']

我们可以添加和修改此列表以添加我们自己的路径。


重新加载模块

Python解释器在会话期间仅导入一次模块。这使事情更有效率。这是一个示例,说明其工作原理。

假设在名为的模块中有以下代码my_module

# This module shows the effect of
#  multiple imports and reload

print("This code got executed")

现在我们看到了多次导入的效果。

>>> import my_module
This code got executed
>>> import my_module
>>> import my_module

我们可以看到我们的代码只执行了一次。这说明我们的模块仅导入了一次。

现在,如果我们的模块在程序执行过程中发生了变化,我们将不得不重新加载它。一种方法是重启解释器。但这并没有太大帮助。

Python提供了一种更有效的方法。我们可以使用模块reload()内部的函数imp来重新加载模块。我们可以通过以下方式做到这一点:

>>> import imp
>>> import my_module
This code got executed
>>> import my_module
>>> imp.reload(my_module)
This code got executed
<module 'my_module' from '.\\my_module.py'>

dir()内置函数

我们可以使用该dir()函数找出在模块内部定义的名称。

例如,我们在开始时就已经在add()模块example中定义了一个函数。

我们可以通过以下方式direxample模块中使用:

>>> dir(example)
['__builtins__',
'__cached__',
'__doc__',
'__file__',
'__initializing__',
'__loader__',
'__name__',
'__package__',
'add']

在这里,我们可以看到名称的排序列表(以及add)。所有其他以下划线开头的名称是与模块关联的默认Python属性(不是用户定义的)。

例如,__name__属性包含模块的名称。

>>> import example
>>> example.__name__
'example'

可以使用dir()不带任何参数的函数找出当前名称空间中定义的所有名称。

>>> a = 1
>>> b = "hello"
>>> import math
>>> dir()
['__builtins__', '__doc__', '__name__', 'a', 'b', 'math', 'pyscripter']
版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站不拥有所有权,不承担相关法律责任。如发现有侵权/违规的内容, 联系QQ1841324605,本站将立刻清除。

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注

联系我们

服务热线:130-0886-1890

QR code