[TOC]
15.Python 模块
描述:模块就是更高级的封装,而模块就是程序;实际就是将一个个python文件编写的函数导入到其他的py文件中进行调用;
前面知识点:
- 容器(数据的封装),
- 函数(语句的封装),
- 类(方法和属性的封装)
关联知识点:
- 命名空间:指定该模块名和模块内的方法名称进行拼接如hello.hi()
模块优点:
- 代码阅读编写方便,模块化编程
- 实现代码的重用
- 优雅/明确/简单
(1) 导入与选择执行
案例:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48#/usr/bin/python3
#导入外部模块验证
## 项目结构
# Day4
# │ demo4.1.py
# │ TemperatureConversion.py
########### 案例1 ##############
#方法1:import TemperatureConversion
#方法2:from TemperatureConversion import c2f,f2c #导入指定模块(不用考虑namespace)
#方法3:from TemperatureConversion import * #不建议此种方法(可能导致命名空间混乱)
#方法:import TemperatureConversion.c2f #导入指定包的指定模块
#方法4:如下(经常)
import TemperatureConversion as Temp
print("32 摄氏度 = %.2f华氏度" %Temp.c2f(32))
print("99 华氏度 = %.2f摄氏度 " %Temp.f2c(99))
########### 案例2 ##############
print(Temp.__name__) #显示的是模块名称
############# 执行结果 ###############
# 32 摄氏度 = 89.60华氏度
# 99 华氏度 = 37.22摄氏度
# TemperatureConversion
# """""""""""""" TemperatureConversion.py """"""""""""""" #
def c2f(cel):
'''摄氏度转华氏度'''
fah = cel * 1.8 + 32
return fah
def f2c(fah):
'''华氏度转摄氏度'''
cel = (fah - 32) / 1.8
return cel
def test():
print("测试 0 C = 0.2f F", c2f(0))
print("测试 0 F = 0.2f C", c2f(0))
#让Python知道是运行还是导入到模块
if __name__ == '__main__': #只有在自身模块文件内才执行test()
print("__name__ 在主程序中显示的是该模块名称, 如果在定义声明文件中执行则显示main : ",__name__) #在本程序TemperatureConversion.py中显示的是main (主程序调用仍然是模块名称)
test()
(2)搜索路径与包package
上面的案例都是模块与主执行文件在同一个目录里面,但是在实际开发中往往是在其他文件子目录中;
Q:那我们如何进行模块的搜寻?1
2
3
4
5import sys
sys.path
['', 'D:\\Python3\\python37.zip', 'D:\\Python3\\DLLs', 'D:\\Python3\\lib', 'D:\\Python3', 'C:\\Users\\Administrator\\AppData\\Roaming\\Python\\Python37\\site-packages', 'D:\\Python3\\lib\\site-packages'(推荐), 'D:\\Python3\\lib\\site-packages\\easygui-0.98.1-py3.7.egg'] # 导入模块时候,Python 在上面的路径中进行查询模块信息并导入
#可以利用 sys.path.append() 进行加入路径到其中
Q:什么是包(Package)?
A:把模块进行分类存放在不同的文件夹里面,把各个文件的位置告诉Python
创建包的步骤:
- 创建一个文件夹存放相关的模块,文件夹名字即是包的名字;
- 在包目录下创建一个init.py (可以为空)
- 将相关模块放入文件夹中,并修改主程序导入包的设置
案例:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21#!/usr/bin/python3
#模块:案例包导入模块主程序
## 项目结构
# │ demo4.2.py
# ├─Demo
# │ │ Module.py
# │ │ __init__.py
from Demo.Module import success #在指定的Demo包下面找到模块并导入模块里面的函数(可直接调用)
success() #直接调用
########## 执行结果 ##############
# 亲,您成功从包里导入模块中的函数到主程序里面,Yes!
#""""""""""""""" Demo\Module.py """"""""""""""#
#!/usr/bin/python
#功能:模块测试程序
def success():
print("亲,您成功从包里导入模块中的函数到主程序里面,Yes!")
(2) 补充说明
描述:Python标准库自己带有一些常用的模块,但是一些高阶用法还是需要查询官网的Document;
1 | Python IDLE - Help - Python Doc(按F1也可以) |
学习一个模块的重要方法:1
2
3
4
5
6
7
8
9>>> import time
>>> dir(time)
>>> help(time)
#注意当来什么模块进行导入时候就是 * 号 , 在存在__all__ 情况下只会导入下面的模块
>>> timeit.__all__
['Timer', 'timeit', 'repeat', 'default_timer']
>>> timeit.__file__ #模块的源代码文件
'D:\\Python3\\lib\\timeit.py'
>>> timeit.__doc__ #显示帮助可采用print进行格式化输出