一、模块
1.什么是模块,什么是包
一个py文件就是一个模块,文件名就是模块名(如果一个模块想要被其他模块使用,模块名必须是标志服且不是关键字)
一个包含 __ init __.py文件的文件夹就是一个包
2.使用其他模块中的内容
一个模块可以使用宁外一个模块中所有的全局变量,但是使用前需要先导入
导入模块的语法:
1)import 模块名 - 导入指定模块,导入后通过‘模块名.x’去使用模块中所有的全局变量
2)import 模块名 import 变量1,变量2,变量3,····· - 导入指定模块,导入后可以直接使用import后面所有变量
3)import 模块名 as 新模块名 - 导入模块并且对模块进行重命名,使用数据时使用新的模块名
4)from 模块名 变量1 as 新变量名1,变量2,变量3,···· - 对变量修改名字
5)from 模块名 import * - 导入模块中所有的全局变量
导入模块的原理:
不管是通过import 还是from import,导入模块的时候都会先进入指定模块,将模块中的代码全部执行
选择性的让模块中的代码在被导入的时候执行和不执行:
if __ name __ ==’__ mian __’:
# 这个if语句外面的代码在被导入时会执行,里面的代码被导入的时候不会被执行
pass
二、包的使用
1.导入包中的内容
1)import 包名 - 只有在自定义完 __ init __.py后才有用
2)import 包名.模块名 - 导入包中指定的模块,使用模块中的内容的格式:包名.模块名.内容
3)重命名:import 包名.模块名 as 新名字
4)from 包名 import 模块名1,模块名2······
5)from 包名.模块 import 变量1,变量2·········
注意:import在导入模块或者包的时候,会检查这个模块或者包之前是否已经导入,如果导入了,不会再重复导入
2.__ init __.py文件的作用
当导入包或者包中内容的时候,会自动执行包中的 __ init __ .py文件
1)给频繁使用的方法添加快捷导入的途径
2)导入包的时候直接导入包中所有的模块
3)以包为单位提供工具
三、系统中的模块
1.random模块
1)random.randint(m,n) # 随机产生m到n的随机整数
2)random.random() # 产生0~1的随机小数
3)random.shuffle(序列) # 将列表中元素的顺序随机打乱
4)random.choice(序列) # 从序列中随机获取一个元素
5)random.choices(序列,k=n) # 从序列中随机获取n个元素
四、时间模块
1.time模块
1)什么是时间错
时间戳:用一个时间到1970年1月1日0时0分0秒(格林威治时间-与北京时间有八小时时差)的时间差来表示一个时间,单位是秒(用时间差来表示时间)
时间戳的优点:a.存储时间戳比存储字符串时间消耗的内存要小很多 b.加密和解密更容易
-
time() - 获取当前时间(时间戳) t1 = time.time() print(t1) # 1615966795.5532377(4字节~5字节)
-
time.localtime() - 获取当前本地时间(结构体时间) time.localtime(时间戳) - 将时间戳对应的时间转化为时间结构体
-
time.sleep(时间) - 让程序睡眠指定时间,单位秒
2.datetime
-
# 获取当前时间 datetime.now() # 2021-03-17 16:37:12.763867 date.today() # 2021-03-17
-
# 时间的加减操作 print('10天前:',t5 - timedelta(days=10)) # 20天前 print('20天前:',t5-timedelta(days=20)) # 1小时前 print(f'1小时前:{t5-timedelta(hours=1)}') # 2小时后 print(f'2小时后{t5+timedelta(hours=2)}') # 47小时 print(f'47小时后:{t5+timedelta(hours=47)}') # 2小时30分以后 print(f'2小时30分后:{t5+timedelta(hours=2,minutes=30)}')
五、hash摘要
1.hash 加密算法 - md5、sha
hash加密的特点:
a.不可逆:无法通过hash加密得到的密文获取到原数据
b.相同的数据通过相同的算法得到摘要(密文)是一样的
c.不同长度的数据通过相同的算法得到的摘要(密文)的长度一样
2.生成数据的摘要(加密)
-
根据算法创建hash对象:hashlib.算法名()
hash_obj = hashlib.md5() hash_obj1 = hashlib.sha1()
-
添加原文 : hash对象.update(需要加密的数据)
加密数据的类型必须是bytes(相当于Python中的二进制)
hash_obj.update('123456'.encode()) hash_obj1.update('123456'.encode())
-
获取摘要(获取密文):hash对象.hexdigest()
result = hash_obj.hexdigest() print(result) # e10adc3949ba59abbe56e057f20f883e result = hash_obj1.hexdigest() print(result) # 7c4a8d09ca3762af61e59520943dc26494f8941b