模块和包 及hash加密算法
-
模块和包的使用
-
什么是模块,什么是包
- 模块 : 一个py文件就是一个模块,文件名就是模块名(如果一个模块想要被其他模块使用,模块名必须是标识符并且不是关键字)
- 包 : 一个包含__init__.py文件的文件夹就是一个包
-
模块的使用
""" import 模块名 - 导入指定模块,导入后通过'模块名.x'去使用模块中所有的全局变量 from 模块名 import 变量1, 变量2, 变量3, ... - 导入指定模块,导入后可以直接使用import后面所有的变量 import 模块名 as 新模块名 - 导入模块并且对模块进行重命名,使用数据时候采用:'新模块名.' from 模块名 import 变量1 as 新变量1, 变量2, 变量3, ... from 模块名 import * - 导入模块中所有的全局变量 导入模块的原理: 不管是通过import还是from-import,导入模块的时候都会先进入指定模块,将模块中的代码全部执行 选择性的让模块中的代码在被导入的时候执行和不执行: if __name__ == '__main__': # 这个if语句外面的代码在被导入的时候会执行,里面的代码被导入的时候不会被执行 pass """ # 假设同目录下有tools这个.py结尾的模块,其中有add_num这个函数和 a = 100的全局变量,在当前的文件要使用其中的变量或者函数,需要import tools import tools 或者 from tools import a,add_num #这样才能在当前文件使用tools中的全局变量和函数 其他同理
-
包的使用
# 1.导入包中的内容 """ import 包名 - 只有在自定义完__init__.py后才有用 import 包名.模块名 - 导入包中指定的模块, 使用模块中的内容的格式: 包名.模块名.x from 包名 import 模块名1, 模块名2, ... from 包名.模块 import 变量1, 变量2,... 注意:import在导入模块或者包的时候,会先检查这个模块或者包之前是否已经导入过,如果已经导入过了不再重复导入 """ # 2. __init__.py文件的作用 # 当导入包或者包中的内容的时候,会自动执行包中的__init__.py文件
-
-
模块
-
系统模块
- 好玩的模块::
turtle(绘画)
;smtplib
;email(邮件)
- 工作涉及到的模块(暂时)
-
os模块 - - - - 提供文件和文件夹操作的相关函数
os.getcwdu()
– 获取当前工作目录(当前工作目录默认都是当前文件所在的文件夹)os.listdir(path)
— 返回指定目录中所有的文件或者文件夹的姓名os.chdir(path)
- - - 改变当前工作目录
-
random模块
-
random.randint(m, n)
— 随机产生指定范围的整数(包括m,n)print(random.randint(10, 20)) # 10
-
random.random()
---- 产生0~1的随机小数print(random.random()) #0-1的小数 print(random.random()*100) #0-100的小数 print(random.random()*50 + 50) #50-100的小数 print(random.random()*5 + 15) # 15-20的小数
-
random.shuffle(列表)
---- 将列表中元素的顺序随机打乱(洗牌)nums = [10, 65, 'raf', 895] random.shuffle(nums) print(nums) # ['raf', 65, 10, 895]
-
random.choice(序列)
- 从序列中随机获取一个元素nums = [10, 65, 'raf', 895] result = random.choice(nums) print(result) # 65
-
random.choices(序列, k=N)
- 从序列中随机获取N个元素nums = [10, 65, 'raf', 895] result = random.choices(nums, k=2) print(result) # [10, 895]
-
-
- 好玩的模块::
-
时间模块
-
time模块(注意 : 需要引入
import time
)-
time
— 获取当前时间(时间戳)import time result = time.time() print(result) # 1615966827.1316657
-
time.localtime()
— 获取当前本地时间(结构体时间)import time t4 = time.localtime(1615966804.79146) print(t4) # time.struct_time(tm_year=2021, tm_mon=3, tm_mday=17, tm_hour=15, tm_min=40, tm_sec=4, tm_wday=2, tm_yday=76, tm_isdst=0) print(t4.tm_year, t4.tm_mon) #2021 3
-
time.sleep(时间)
— 让程序睡眠指定的时间,单位秒import time print('=======') time.sleep(1) print('+++++++') ''' ======= #会停顿1秒再打印下面 +++++++ '''
-
-
datetime模块 -
time
、datetime
、date
(注意 : 要引入
from datetime import time, datetime, date, timedelta
)-
datetime.now()
— 获取当前时间from datetime import time, datetime t5 = datetime.now() print(t5) # 2021-03-17 16:36:54.297076 print(t5.year, t5.month, t5.hour) #2021 3 20 t6 = date.today() print(t6) # 2021-03-17
-
date.today()
– - 获取今天的(年-月-日)from datetime import date t6 = date.today() print(t6) # 2021-03-17
-
timedelta(days=10)
- - - 时间的加减(days=10 相当于10天)from datetime import time, datetime,date print('当前时间:', datetime.now()) #当前时间: 2021-03-17 20:36:43.812073 # 10天前: print('10天前:', t5 - timedelta(days=10)) # 10天前: 2021-03-07 20:36:43.812073 # 20天前 print('20天前', t5 - timedelta(days=20)) # 20天前 2021-02-25 20:36:43.812073 print('1个小时前:', t5 - timedelta(hours=1)) # 1个小时前: 2021-03-17 19:36:43.812073 print('2个小时后:', t5 + timedelta(hours=2)) # 2个小时后: 2021-03-17 22:36:43.812073 print('47个小时后:', t5 + timedelta(hours=47)) # 47个小时后: 2021-03-19 19:36:43.812073 print('2小时30分后:', t5 + timedelta(hours=2, minutes=30)) # 2小时30分后: 2021-03-17 23:06:43.812073 t6 = t5 - timedelta(days=1, hours=1) print(t6, t6.year, t6.month, t6.day, t6.hour, t6.minute, t6.second) # 2021-03-16 19:36:43.812073 2021 3 16 19 36 43
-
-
-
hash加密
注意 : 需要引入
import hashlib
-
hash加密算法 – md5(不可逆) sha相关
""" hash加密的特点: a. 不可逆:无法通过hash算法加密得到密文获取到原数据 b. 相同的数据通过相同的算法得到摘要(密文)是一样的 c. 不同长度是数据通过相同的算法得到的摘要(密文)的长度一样 """
-
生成数据摘要(加密)
-
根据算法创建hash对象:
hashlib.算法名()
# 常用算法:md5、shaX hash_obj = hashlib.md5()
-
添加原文 :
hash.对象update(需要加密的数据)
注意:加密数据的类型必须bytes(相当于python中二进制数据)
hash_obj.update('123456'.encode())
-
-
-
-
获取摘要(获取密文) :
hash对象.hexdigest()
result = hash_obj.hexdigest() print(result) # e10adc3949ba59abbe56e057f20f883e ```