第二十天 面向对象之异常 |
学习目标:
1、模块
2、了解模块
3、导入模块
4、制作模块
5、__all__
列表
6、包的使用方法
一、模块
1、定义
1、Python模块,是一个python文件,以py结尾。
2、其中包含了Python对象定义和Python语句。
3、模块能定义函数,类和变量,可执行代码。
4、是开发Python软件的程序员已经规定好的代码!!!!
5、我们任意使用即可!
2、寻找模块
这里以模块random.py为例,Project->External Libraries->Python 3.6->lib->random.py
3、导入模块
import模块名
from 模块名 import 功能名1,功能名2,功能名3
from 模块名 import *
import 模块名 as 模块别名
from 模块名 import 功能名 as 功能别名
只导入模块和只进行模块名修改
import模块名
import 模块名 as 模块别名
调用时,需要模块名.功能名()!!!!
# 只导入模块
import math
print(math.sqrt(9)) # 3.0
# 模块名修改
import math as tt
print(tt.sqrt(9)) # 3.0
导入模块的某个功能和进行功能名的修改
from 模块名 import 功能名1,功能名2,功能名3
from 模块名 import *
直接功能名()调用即可!!!!
from math import sqrt
print(sqrt(9)) # 3.0
# 功能别名
from time import sleep as tt
tt(2)
print('yyy') # yyy
二、制作模块
步骤:
1、定义模块
2、测试模块
3、调用模块
1、定义模块
# 1、定义模块
# 新建python文件,命名.py,(如my_module1.py)按照工作需求定义函数
# (工作中写成英文)
def testA(a, b):
print(a+b)
# 2、测试模块(不好)
# 3、调用模块
# 通过04调用自己制作的模块.py文件
2、测试模块
# testA(1,2) # 3
# 调用时,一定要删除,否则会调用
# 2、测试模块(测试模块一直存在,便于随时修改)
# print(__name__) # __main__当前文件,my_module1调用其模板的py
if __name__ == '__main__':
testA(1,1) # 在当前文件下,测试出2
3、调用模块
04调用自己制作的模块.py文件代码:
# 1、导入模块
import my_module1
# 2、调用功能
my_module1.testA(2,2) # 4
使用if条件书写测试模块的好处:
1、避免了test代码删除、添加,重复工作。
2、在自定义模块中,可以执行检验代码;在其它模块中使用,其模块中的检验代码则不会执行
三、模块定位顺序
模块定位顺序:(默认顺序)
1、当前目录(当前py所在的文件夹)
2、Python搜索shell变量PYTHONPATH下的每一个目录
3、会查看默认路径。例,UNIX下,默认路径一般为/user/local/lib/python/
总结:
1、自己的文件名不能和已有的模板名重复,否则导致模块功能无法使用
2、使用from 模块名 import 功能 的时候,如果功能名重复,调用最后定义或导入的功能
1、定位顺序注意点一
验证自己的文件名不能和已有的模板名重复,否则导致模块功能无法使用
2、定位顺序注意点二
验证使用from 模块名 import 功能 的时候,如果功能名重复,调用最后定义或导入的功能
三、名字重复的严重性
以变量名为例
1、变量也能覆盖模块名(很严重)(所以不能起和模块名一样的名字)
2、在Python中,数据是通过引用传递的,后面的数据会覆盖前面的同名数据!
四、__all__
概念:是模块中的一个变量名,取值为列表数据,所以简称
作用:控制模块导入功能时的导入行为
举例:若一个模块文件中有__all__变量,name导入所有功能时,只能导入这个列表中的元素
1、只导入列表中的一个元素
1-1、导入一个功能,将功能添加到__all__列表中
1-2、testB没有添加到all列表,所以会报错,只有all列表里的功能才能被调用
2、导入列表中的多个元素
2-1、若是想要导入多个功能,则将功能添加到__all__列表中即可
2-2、导入模块、功能,然后调用相应的功能
五、包
1、包概念
概念:指的是一个文件夹,里面存储有联系的模块。文件夹名字就是包名
里面会自动创建一个__init__.py
作用:找到包,模块里的功能也能使用
2、制作包
步骤:New->Python Package-输入包名-OK-新建功能模块(有联系的模块)
备注:会自动创建的__init__.py文件,控制着包的导入行为
1、创建包
2、新建模块
3、书写模块代码
3、导入包
两种方式
1、import 包名.模块名
导入指定
包名.模块名.目标
2、from 包名 import *
导入所有
注意必须要将允许导入的模块写入__all__列表,否则报错
模块名.目标
1、import 包名.模块名
导入指定
# 导入包名1:
import mypackage.my_module1
# 调用功能
mypackage.my_module1.info_print1()
2、from 包名 import *
导入所有
注意必须要将允许导入的模块写入
__all__
列表(在包自动创建的__init__.py
里面书写),否则报错
按照自己需求,在这种导全部的导包方式下,将模块名添加到__all__
列表中。
导入包时用的代码 09导入包.py
# 导入所有
from mypackage import *
my_module1.info_print1()
# 1
# my_module1
my_module2.info_print2()
# 2
# my_module2
题外话1:若采用第一种导包的方式导入多个模板的话,记得每一个模板前加包名.
PS:不用!因为我们采用第二种导入包名的方式__all__配合使用导入多个模块,会比较好
题外话2:若是不定位到目标,调用出功能外的其它数据(暂时小编未觉得有多大用),所以说,我们一定要定位到指定的功能最佳!
总结
1、导入模块的方法
import模块名
from 模块名 import 功能名1,功能名2,功能名3
from 模块名 import *
import 模块名 as 模块别名
from 模块名 import 功能名 as 功能别名
2、调用模块
若是import模块名,模块名.功能名()
若是还有功能名,则直接使用功能名()调用即可
3、导入包的方法
1、import 包名.模块名
包名.模块名.目标
2、from 包名 import *
注意必须要将允许导入的模块写入__all__列表,否则报错
模块名.目标
4、调用包的模块内的功能
若是指定到具体模块名,则全需要书写
若是导入到所有模块,则需要模块名.目标即可
__all__ = []
允许导入的模块或功能列表
5、模块定位顺序(默认顺序)
1、当前目录(当前py所在的文件夹)
2、Python搜索shell变量PYTHONPATH下的每一个目录
3、会查看默认路径。例,UNIX下,默认路径一般为/user/local/lib/python/
6、避免文件名、方法名、变量名于模块名重复
1、自己的文件名不能和已有的模板名重复,否则导致模块功能无法使用
2、使用from 模块名 import 功能 的时候,如果功能名重复,调用最后定义或导入的功能