上一章Python教程请查看:python3全局关键关键字global
在本文中,你将学习如何用Python创建和导入自定义模块。此外,你还将发现在Python中导入和使用定制和内置模块的不同技术。
Python中的模块是什么?模块指的是包含Python语句和定义的文件。
包含Python代码的文件,例如:example.py称为模块,其模块名为example。
我们使用模块把大的程序分解成小的、可管理的、有组织的文件,此外,模块提供代码的可重用性。
我们可以在模块中定义最常用的函数并导入它,而不是将它们的定义复制到不同的程序中。
让我们创建一个模块,键入以下内容并将其保存为example.py。
# Python模块例子
def add(a, b):
"""这个程序添加两个数字并返回结果"""
result = a + b
return result
这里,我们在一个名为example的模块中定义了一个add()函数,该函数接受两个数字并返回它们的和。
如何在Python中导入模块?我们可以将模块内的定义导入另一个模块或Python中的交互式解释器。
我们使用import关键字来做这件事,为了导入前面定义的模块示例,我们在Python提示符中输入以下内容。
>>> import example
这不会在当前符号表中直接输入example中定义的函数的名称,它只在那里输入模块名称example。
使用模块名,我们可以使用点.操作符来访问函数,例如:
>>> example.add(4,5.5)
9.5
Python有大量可用的标准模块。
你可以查看Python标准模块的完整列表及其用途,这些文件位于安装Python的位置内的Lib目录中。
可以像导入用户定义的模块一样导入标准模块。
导入模块的方法多种多样,它们列在下面。
Python导入import语句我们可以使用import语句导入模块,并使用上面描述的点操作符访问模块内部的定义。这里有一个例子。
# 导入语句示例
# 导入标准模块数学
import math
print("pi的值: ", math.pi)
导入import与重命名我们可以通过如下方式对模块进行重命名来导入它。
# 通过重命名导入模块import math as m
print("pi的值: ", m.pi)
我们已经将math模块重命名为m,这在某些情况下可以节省我们的输入时间。
注意,math这个名称在我们的范围中不被识别,因此math.pi是无效的,m.pi是正确的实现。
Python from…import语句我们可以从模块中导入特定的名称,而不需要整体导入模块。这里有一个例子。
# 只从数学模块导入pi from math import pi
print("pi的值: ", pi)
我们只从模块中导入pi属性。
在这种情况下,我们不使用点运算符,我们可以像下面这样导入多个属性。
>>> from math import pi, e
>>> pi
3.141592653589793
>>> e
2.718281828459045
导入所有的名称我们可以使用以下结构从模块中导入所有的名称(定义)。
# 从标准模块math中导入所有名称from math import *
print("Pi的值: ", pi)
我们从math模块导入了所有的定义,这使得除那些以下划线开头的名字以外的所有名字在我们的作用域中都可见。
使用星号(*)符号导入所有内容不是一种好的编程实践,这可能导致标识符的定义重复,它还会妨碍代码的可读性。
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的模块中有以下代码。
# 这个模块显示的效果是
# 多个导入和重载
print("这段代码被执行了")
现在我们看到了多个导入的效果。
>>> import my_module
这段代码被执行了
>>> import my_module
>>> import my_module
我们可以看到我们的代码只执行了一次,这就是说,我们的模块只导入了一次。
【python3模块 – Python3教程】现在,如果我们的模块在程序过程中改变了,我们将不得不重新加载它,一种方法是重新启动解释器,但这并没有多大帮助。
Python提供了一种简单的方法,我们可以使用imp模块中的reload()函数来重新加载模块,实现是这样的:
>>> import imp
>>> import my_module
这段代码被执行了
>>> import my_module
>>> imp.reload(my_module)
这段代码被执行了
<
module 'my_module' from '.\\my_module.py'>
dir()内置函数我们可以使用dir()函数查找模块中定义的名称。
例如,我们在开始的模块示例中定义了一个add()函数。
>>> 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']
推荐阅读
- python3包(package)和模块(module) – Python3教程
- python3全局关键字global – Python3教程
- python3全局变量、局部变量和非局部变量 – Python3教程
- python3匿名函数和Lambda函数 – Python3教程
- python3 递归(递归函数) – Python3教程
- python3 函数参数 – Python3教程
- python3 函数 – Python3教程
- python3 pass语句 – Python3教程
- python3 break和continue语句 – Python3教程