第七章 模块(module)
1.模块化程序设计理念
1.设计API,进行功能描述。
2.编码实现API中描述的功能
3.在模块中编写测试代码,并消除全局代码
4.使用私有函数实现不被外部客户端调用的模块函数
设计计算薪水模块的API
我们可以通过__doc__可以获得模块的文档字符串的内容。
import salary
print(salary.doc)
print(salary.yearSalary.doc)
模块`
'''用于计算公司员工的薪资'''
company="北京尚学堂"
def yearSalary(monthSalary):
'''根据传入的月薪的值,计算出年薪:Monthsalary*12'''
return monthSalary*12
def daySalary(monthSalary):
'''根据传入的月薪值,计算出1天的薪资。一个月按照22.5天计算'''
return monthSalary/22.5
###测试代码
if __name__=='__main__':
print(yearSalary(5000))
调用
import math
import Salary
print(Salary.__doc__)
print(Salary.daySalary.__doc__)
2.模块的导入 __import 和from__import
import导入的是模块。from……import导入的是模块中的一个函数/一个类。
import 模块名
import 模块1,模块2
import 模块名 as 模块 别名
import加载的模块分为四个 通用类别:
a.使用python编写的代码
b.已被编译为共享库或DLL的C或C++扩展
c.包好一组模块的包
d.使用C编写并连接到python解释器的内置模块
Python中可以使用from……import导入模块中的成员。
from 模块名 import 成员1,成员2
from math import * ##*代表着说有的文件名,一般不建议这么使用
3.import()
import语句本质上就是调用内置函数__import__(),我们可以通过它实现动态导入。给__import__()动态传递不同的参数值,就能导入不同的模块。
一般不建议使用__import__()导入
如果需要动态导入可以使用importlib模块
import importlib
a=importlib.import_module('math')
print(a.pi)
一个模块无论导入多少次,这个模块在整个解释器进程内有且仅有一个实例对象。
需要重新加载时,利用importlib函数
import importlib
importlib.reload(模块名)
3.包package的使用
当一个项目中有很多个模块时,需要再进行组织。我们将功能类似的模块放到一起,形成了“包”。本质上,“包”就是一个必须有__init__.py的文件夹。
- import a.aa.module_AA
使用时,必须加完整名称来引用。 a.aa.module_AA.fun_AA()
2.from a.aa import module_AA
可以直接使用模块名 module_AA.fun_AA()
3.from a.aa.module_AA import fun_AA
可以直接使用函数名。fun_AA()
init.py的三个核心作用:
1.作为包的标识不能删除
2.用来实现模糊导入
3.导入包实质是执行__init__.py文件,可以在__init__.py文件中做这个包的初始化,以及需要统一执行代码。
4.包内引用
如果是子包内的引用,可以按相对位置引入子模块
from…import module_A #表示上级目录 …表示上级目录,.表示同级目录
from.import module_A #.表示同级目录
- sys.path 和模块搜索路径
import sys
sys.path.append("d:/")
print(sys.path)
6.模块发布和安装