模块就是程序,是更高一级的封装
模块
命名空间
命名空间(namespace)表示标识符(ideantifier)的可见范围。一个标识符可以在多个命名空间中定义,它在不同命名空间中的含义是互不相干的。
在python中每个模块都会维护一个独立的命名空间,我们应该将模块名加上,才能够正常使用模块中的函数。
导入模块
import 模块名
直接import,但是在调用模块中的函数的时候,需要加上模块的命名空间。
#f2c.py
"""
定义一个华氏温度跟摄氏温度相互转换的模块
"""
def c2f(cel):
fah = cel * 1.8 + 32
return fah
def f2c(fal):
cel = (fal - 32) / 1.8
return cel
# module_import.py
import f_c
print("32摄氏度 = %.2f华氏度" % f_c.c2f(32))
print("100华氏度 = %.2f摄氏度" % f_c.f2c(100))
## 运行结果是
32摄氏度 = 89.60华氏度
100华氏度 = 37.78摄氏度
from 模块名 import 函数名
这种导入方式会直接将模块的命名空间覆盖进来,所以调用的时候也就不需要再加上命名空间了
#f2c.py
"""
定义一个华氏温度跟摄氏温度相互转换的模块
"""
def c2f(cel):
fah = cel * 1.8 + 32
return fah
def f2c(fal):
cel = (fal - 32) / 1.8
return cel
# module_import.py
from f_c import c2f,f2c
print("32摄氏度 = %.2f华氏度" % c2f(32))
print("100华氏度 = %.2f摄氏度" % f2c(100))
import 模块名 as 新名字
这种方式给导入的命名空间替换一个新的名字
#f2c.py
"""
定义一个华氏温度跟摄氏温度相互转换的模块
"""
def c2f(cel):
fah = cel * 1.8 + 32
return fah
def f2c(fal):
cel = (fal - 32) / 1.8
return cel
# module_import.py
import f_c as fc
print("32摄氏度 = %.2f华氏度" % fc.c2f(32))
print("100华氏度 = %.2f摄氏度" % fc.f2c(100))
模块的作用
封装、组织python的代码。
当代码量非常庞大的时候,可以有组织有纪律地根据不同的功能,将代码分割成不同的模块,这样,每个模块之间都是相互独立的。
- 实现代码的重用
模块的搜索路径
Python模块的导入需要一个路径搜索的过程,而这个路径搜索就是一组目录,可以通过sys模块中的path变量显示出来
#f2c.py
"""
定义一个华氏温度跟摄氏温度相互转换的模块
"""
def c2f(cel):
fah = cel * 1.8 + 32
return fah
def f2c(fal):
cel = (fal - 32) / 1.8
return cel
# module_import.py
import sys
import os
sys.path.append(os.curdir)
#import f_c
#from f_c import c2f,f2c
import f_c as fc
print("32摄氏度 = %.2f华氏度" % fc.c2f(32))
print("100华氏度 = %.2f摄氏度" % fc.f2c(100))
模块的包
在实际的开发中,一个大型的系统有成千上万的Python模块是很正常的事情。单单用模块来定义Python的功能显然不够,如果都放在一起显然不好管理并且有命名冲突的可能,因此,python中也出现了包。
包:把模块分门别类的存放再不同的文件夹,然后把各个文件夹的位置告诉python
创建包
- 创建一个文件夹,用于存放相关的模块,文件夹的名字即包的名字
- 在文件夹中创建一个init.py的模块文件,内容可以为空
- 将相关的模块放入文件夹中
#f2c.py
"""
定义一个华氏温度跟摄氏温度相互转换的模块
"""
def c2f(cel):
fah = cel * 1.8 + 32
return fah
def f2c(fal):
cel = (fal - 32) / 1.8
return cel
# module_import.py
import sys
import os
sys.path.append(os.curdir)
#import f_c
#from f_c import c2f,f2c
import module.f_c as fc
print("32摄氏度 = %.2f华氏度" % fc.c2f(32))
print("100华氏度 = %.2f摄氏度" % fc.f2c(100))