Python 模块
Python 模块
在本文中,您将学习在 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)
在这里,我们已经从数学模块中导入了所有定义。这包括在我们范围内可见的所有名称,但以下划线开头的名称(私有定义)除外。
使用星号 (*) 符号导入所有内容并不是一个好的编程习惯。这可能导致标识符的重复定义。它也妨碍了我们代码的可读性。
Python 模块搜索路径
在导入模块时,Python 会查看几个地方。解释器首先寻找一个内置模块。然后(如果未找到内置模块),Python 会查看 sys.path
中定义的目录列表 .搜索是按此顺序进行的。
- 当前目录。
PYTHONPATH
(带有目录列表的环境变量)。- 依赖于安装的默认目录。
>>> import sys >>> 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
内的函数 module 重新加载一个模块。我们可以通过以下方式实现:
>>> 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
我们一开始就有的。
我们可以使用 dir
在 example
模块方式如下:
>>> 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']
Python