Python模块
在本文中,您将学习在 Python中创建和导入自定义模块。此外,您会发现在 Python 中导入和使用自定义和内置模块的不同技术。
Python模块是包含 Python 定义和语句的文件,以 .py 结尾。模块可以定义函数、类和变量。模块还可以包含可运行的代码。将相关代码分组到一个模块中,使代码更易于理解和使用,它还使代码具有逻辑性。
在使用模块是会将大型程序分解为可管理和有组织的小文件。此外,模块提供了代码的可重用性。可以在一个模块中定义最常用的函数并导入它,而不是将它们的定义复制到不同的程序中。
# Python Module example
def add(a, b):
"""This program adds two
numbers and return the result"""
result = a + b
return result
在这里,我们晓得博客在名为example的模块中定义了一个add()函数 。该函数接受两个数字并返回它们的总和。
如何在 Python 中导入模块
可以将模块内的定义导入到另一个模块或 Python 中的交互式解释器。可使用import
关键字来做到这一点。在导入我们之前定义的模块example
,在 Python 提示符中键入以下内容。
>>> import example
这不会直接在当前程序中导入定义的函数的名称,只是在example
那里导入模块名称。使用模块名称,我们可以使用点 .
运算符访问该函数。例如:
>>> example.add(4,5.5)
9.5
Python有大量的标准Python模块。您可以查看Python 标准模块及其用例的完整列表。这些文件位于 Python 安装位置内的 Lib 目录中。可以像导入用户定义的模块一样导入标准模块。有多种方法可以导入模块。
Python模块导入语句
我们可以使用该import
语句导入一个Python模块,并使用上述的点运算符访问其中的定义。这是一个例子。
# import statement example
# to import standard module math
import math
print("The value of pi is", math.pi)
当你运行程序时,输出将是:
pi 的值为 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 会查看多个位置。解释器首先寻找内置模块。然后(如果未找到内置模块),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
来重新加载模块。我们可以通过以下方式做到:
>>> 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']
推荐:Pycharm教程