量变引起质变。
语句–函数与变量–类和对象–模块–包
包 类似于文件夹(女生的包是用来放东西的),模块类似于文件。
API: 应用程序编程接口
我们可以通过**doc**可以获得模块的文档字符串的内容。
本模块用于计算公司员工的薪资 为 print(salary.doc)对应的字符串内容
每个模块都有一个名称,通过特殊变量__name__可以获取模块的名称。
模块名字对应源文件名。
仅有一个例外,就是当一个模块被作为程序入口时(主程序、交互式提示符下),它的__name__的值为“main”。我们可以根据这个特点,将模块源代码文件中的测试代码进行独立的处理。例如:
importmathmath.name#输出’math’
用于计算公司员工的薪资
"""
company = "北京尚学堂"
def yearSalary(monthSalary):
#计算年薪
"""根据传入的月薪的值,计算出年薪:monthsalary*12"""
return monthSalary*12
def daySalary(monthSalary):
"""根据传入的月薪值,计算出1天的薪资。一个月按照22.5天计算(国家规定的工作日)"""
return monthSalary/22.5
if __name__ == "__main__":
print(yearSalary(3000))#根据月薪求年薪
print(daySalary(3000))#根据月薪求日薪
结果:
36000
133.33333333333334
1.7模块文档字符串和API设计
我们可以在模块的第一行增加一个文档字符串,用于描述模块的相关功能。然后,通过__doc__可以获得文档字符串的内容。
2.模块的导入
模块化设计的好处之一就是“代码复用性高”。写好的模块可以被反复调用,重复使用。模块的导入就是“在本模块中使用其他模块”。
2.1import语句导入
math模块被加载后,实际会生成一个module类的对象,该对象被math变量引用,可以通过math变量引用模块中所有的内容。
我们通过import导入多个模块,本质上也是生成多个module类的对象而已。
2.2from…import导入
Python中可以使用from…import导入模块中的成员。
基本语法格式如下:from 模块名 import 成员1,成员2,…
如果希望导入一个模块中的所有成员,则可以采用如下方式:
from 模块名 import (但是我们一般也不用 害怕取代掉别的参量)
from math import pi,sin
print(sin(pi/2))
#输出1.0
2.3import语句和from…import语句的区别
import导入的是模块。from…import导入的是模块中的一个函数/一个类。
##使用__import__()动态导入指定的模块
s="math"
m=__import__(s) #__import__()可以实现动态导入,动态的传递不同的参数值
print(m.pi) #数学函数中的pai
import importlib
a=importlib.import_module("math")
print(a.pi)
2.5模块的加载问题
当导入一个模块时,模块中的代码都会被执行。不过,如果再次导入这个模块,则不会再次执行。
重新加载有时候我们确实需要重新加载一个模块,这时候可以使用:
importlib.reload()
import test02
import test02
print("####")
import importlib
importlib.reload(test02)#此时 对test02 进行重新加载
3.包package的使用
3.1包(package)的概念和结构
当一个项目中有很多个模块时,需要再进行组织。我们将功能类似的模块放到一起,形成了“包”。本质上,“包”就是一个必须有__init__.py的文件夹。
这是包区别于文件夹的判断原理
3.2pycharm中创建包
在module_AA 中,设置函数命令为
print(“AA”)
通过调用包 ,import a.aa.module_AA,
结果就是 AA .
#以上两种输入都可以 ,fun —>function 方法
3.3导入包操作和本质
【注】1.frompackageimportitem这种语法中,item可以是包、模块,也可以是函数、类、变量。2.importitem1.item2这种语法中,item必须是包或模块,不能是其他。
导入包的本质其实是“导入了包的__init__.py”文件。也就是说,”importpack1”意味着执行了包pack1下面的__init__.py文件。这样,可以在__init__.py中批量导入我们需要的模块,而不再需要一个个导入。
3.4 用*导入包(模糊导入)
尽管提供import*的方法,仍不建议在生产代码中使用这种写法。
3.5包内引用
如果是子包内的引用,可以按相对位置引入子模块以aa包下的module_AA中导入a包下内容为例:
from…importmodule_A# …表示上级目录.表示同级目录from.importmodule_A2# .表示同级目录
3.6sys.path和模块搜索路径
当任何一个python程序启动时,就将上面这些搜索路径(除内置模块以外的路径)进行收集,放到sys模块的path属性中(sys.path)。
·使用sys.path查看和临时修改搜索路径
sys.path.append()临时添加的目录
.pth文件的写法
我们可以在site-packages目录下添加.pth文件。并在文件中增加内容:
#一行一个目录
g:\a
g:\b
g:\c
【注】1.需确保g:\a,g:\b,g:\c对应的目录真实存在。2.在windows系统中建立.pth文件,由于没有文件名不能直接建立。需要输入:“.pth.”才能正常建立.pth文件。
4.模块发布和安装
1.为模块文件创建如下结构的文件夹
2.在文件夹中创建一个名为『setup.py』的文件
3.构建一个发布文件。通过终端,cd到模块文件夹c下面,再键入命令:python setup.py sdist执行完毕后,目录结构变为: