模块(Module)
Python 模块,是一个 Python 文件,也以 .py 结尾,包含了 Python 对象定义和Python语句。
模块能定义函数,类和变量,模块里也能包含可执行的代码。
导入模块
导入模块的方式
- import 模块名
- from 模块名 import 功能名
- from 模块名 import *
- import 模块名 as 别名
- from 模块名 import 功能名 as 别名
导入方式详解
下面所说的功能包含模块内的函数,变量,类等
import
语法
# 1. 导入模块
import 模块名
import 模块名, 模块名...
# 2. 调用功能
模块名.功能
- 将导入
模块名
的所有内容,可通过模块名.
进行访问
体验
import math #内置数学运算库
print(math.sqrt(9)) #3.0
print(math.pi) #3.141592653589793
from…import…
语法
from 模块名 import 功能1,功能2...
- 无需
模块名.
,可以直接当做本文件中的功能,直接用功能名使用 - 注意导入的功能与本文件内的功能重名的问题
体验
from math import sqrt,pi
print(sqrt(9)) #3.0
print(pi) #3.141592653589793
from …import *
语法
from 模块名 import *
- *代表all,将导入
模块名
的所有功能
体验
from math import *
print(sqrt(9)) #3.0
print(pi) #3.141592653589793
as定义别名
- 为了避免模块与本文件的功能重名,以及模块功能名过长等问题,可以利用
as
给导入的模块功能取别名
语法
# 模块定义别名
import 模块名 as 别名
# 功能定义别名
from 模块名 import 功能 as 别名
体验
# 模块别名
import math as m
m.sqrt(9) #3
m.pi #3.141592653589793
# 功能别名
from math import factorial as fact #阶乘
fact(3) #6
制作模块
在Python中,每个Python文件都可以作为一个模块,模块的名字就是文件的名字。也就是说自定义模块名必须要符合标识符命名规则。
定义模块
新建一个Python文件,命名为MyModule.py
,并定义myfunction
函数。
#MyModule.py
def myfunction(var):
print("无事发生...")
测试模块
在实际开中,当一个开发人员编写完一个模块后,为了让模块能够在项目中达到想要的效果,这个开发人员会自行在py文件中添加一些测试信息.,例如,在MyModule.py
文件中添加测试代码。
#MyModule.py
def myfunction(*a,**b):
print("无事发生...")
myfunction(1)
此时,无论是当前文件,还是其他已经导入了该模块的文件,在运行的时候都会自动执行myfunction
函数的调用。
这好吗?这不好。
解决办法如下:
#MyModule.py
def myfunction(*a,**b):
print("无事发生...")
# 只在当前文件才能调用该函数,其他导入的文件不符合该条件,则不执行函数myfunction的调用
if __name__ == '__main__': #__main__为系统变量,代表本文件的主函数
myfunction(1)
调用模块
import MyModule
MyModule(110,911)
#无事发生...
模块定位顺序
当导入一个模块,Python解析器对模块位置的搜索顺序是:
- 当前目录
- 如果不在当前目录,Python则搜索在shell变量PYTHONPATH下的每个目录。
- 如果都找不到,Python会察看默认路径。UNIX下,默认路径一般为/usr/local/lib/python/
模块搜索路径存储在system模块的sys.path变量中。变量里包含当前目录,PYTHONPATH和由安装过程决定的默认目录。
- 注意
- 自己的文件名不要和已有模块名重复,否则导致模块功能无法使用
- 模块调用时的时候,如果功能名字重复,调用到的是最后定义或导入的功能。后来者居上。
__all__
变量
语法
#Module.py
__all__=[功能1,功能2]
- 如果一个模块文件
Module.py
中有__all__
变量,当使用from Module import *
导入时,只能导入这个列表中的功能。
如:
- my_module模块代码
__all__ = ['testA']
def testA():
print('testA')
def testB():
print('testB')
- 导入模块的文件代码
from my_module import *
testA() #testA
testB() #报错
包(package)
- 包将有联系的模块组织在一起,即放到同一个文件夹下,并且在这个文件夹内创建一个名字为
__init__.py
文件。这个文件夹就被称为包。 - 包能够清楚地架构出一大类功能
制作包
- 创建一系列模块
- 创建
__init__.py
文件,可以置空
快速体验
- 建立文件夹
MyPackage
- 创建
__init__.py
,my_module1.py
,my_module2.py
- 分别编写模块
# my_module1
def getout():
print("请走")
# my_module2
def getin():
print("请进")
导入包
import 包名.模块名
import 包名.模块名
包名.模块名.功能
体验
import MyPackage.my_module1
import MyPackage.my_module2
MyPackage.my_module2.getin()
MyPackage.my_module1.getout()
#请进
#请走
from 包名 import *
注意:必须在
__init__.py
文件中添加__all__ = []
,控制允许导入的模块列表。
#__init__.py
__all__=[模块1,模块2...]
from 包名 import *
模块名.功能
体验
#__init__.py
__all__=[my_module1]
import MyPackage.my_module1
import MyPackage.my_module2
MyPackage.my_module2.getin() #请进
MyPackage.my_module1.getout() #未能导入,报错
库(library)
- Python中,具有某些功能的模块和包都可以被称作库。
- Python内置了许多有用的库,这些库不用自己额外安装,可以直接导入,如math,os,time等…
- Python拥有强大的第三方库资源,几乎任何互联网领域都有相关的Python第三方库。第三方库需要自己额外下载安装。