![]()
1、包
1、创建一个以包命名的名称空间
2、执行包中的__init__文件,将__init__里面的代码块加载到以包命名的名称空间中
3、调用包内的名字必须通过包名. 的方式调用
# 调用文件夹a里面的文件夹b里面的模块m
#第一步 在此文件 import a
#第二步 在a 的__init__ 添加from a import b
#第三步 在b 的__init__ 添加from a.b import m
#完成以上三步,那么执行文件就可以引用b文件夹的m模块里面的函数func1
a.b.m.func1()
总结:
from a.b import c .的左边一定是个包,import后面一定是一个具体的名字
包里面的__init__如果想要引用模块必须是from...import... 不能直接import
from a.b.c.d import e.f.g 错误,import后面不能再.
from a.b.c.d import e 正确
2、绝对导入和相对导入
绝对导入:以执行文件的sys.path为起始点开始导入,称之为绝对导入
优点: 执行文件与被导入的模块中都可以使用
缺点: 所有导入都是以sys.path为起始点,导入麻烦
相对导入: 参照当前所在文件的文件夹为起始开始查找,称之为相对导入
符号: .代表当前所在文件的文件夹,..代表上一级文件夹,...代表上一级的上一级文件夹
优点: 导入更加简单
缺点: 只能在导入包中的模块时才能使用
3、random
print(random.random()) # 大于0且小于1之间的小数
print(random.uniform(1,3)) # #大于1小于3的小数
print(random.randint(1,5)) # 大于等于1且小于等于5之间的整数
print(random.randrange(1,10,2)) # 10以内的奇数
print(random.choice(['aa','bb','某'])) # 多选一
print(random.sample(['aa','bb','某','我'],2)) # 多选多
chr()判断数字对应的ASCII码