现在Python这门编程语言是越来越火了,其中的一个主要原因就是Python中有各种各样的模块,这是其他很多编程语言中都没有的。Python中这些模块都各有其功能,需要的时候直接导入就可以,简直不要太方便
模块是什么
- 模块的本质: 就是一个保存特定函数的py文件
所以要做一个模块,拿一个空py文件,然后写入各种函数就行了,
像这样,在模块里定义各种函数就可以了,这里定义的就是一个两数加法运算和减法运算的函数
导入模块的三种方法
- 正常导入
import cal,time,turtle #连续导入3个模块
- from方法
from cal import * #这样会导入模块内所有的方法
from cal import add #只导入cal模块内的add方法
#该方法再调用模块内方法时就不需要带模块名,而直接使用
- 使用路径导入
from my_module import cal #这样会导入模块内所有的方法
print(cal.add(3,8)) #调用cal这个模块下的函数
print(cal.sub(3,8))
#其中,my_module是与源文件同路径下的一个目录,即采用相对路径
包的概念
实质上就是存放各种模块的一个目录
-
引入了包之后,只要顶层的包名不与其他包冲突,那所有的模块就不会冲突。
-
如果有个包名叫pcak_one,包下面还有一个包叫pack_two,里面有个py模块叫add.py,那当你引入了包以后,add.py的名字就变成了pack_one.pack_two.add.py,简单来说就是一层一层的关系。
-
每一个包目录下面都会有一个__init__.py文件,否则python就会把该包目录当成一个普通文件夹,而不是一个包。
-
init.py本身就是一个模块,它的模块名就包的名字,调用包就是执行包下的__init__.py文件。
-
如图
这就是一种多个包的嵌套,web, web1, web3都是包名,cal.py是模块名
包的导入
或者也可以这样:
from web.web1.web3.cal import add #这样会导入模块内的add方法
两个补充知识
- sys.path方法
import sys
print(sys.path) #查看所有执行文件的路径,这其中就包括了你自己导入的包的路径
- __init__是使用
调用模块时,在 if name == ‘main’: 下执行可以有效防止无意的嵌套调用,这也是很多Python编程者是一种编程习惯