1、反射
关键字:
getattr 根据字符串的形式,去对象中找该成员
hasattr 根据字符串的形式,判断对象中是否有该成员
setattr 根据字符串的形式,去对象动态设置一个成员(内存)
delattr 根据字符串的形式,去判断对象动态的设置一个成员(内存)
简单例子:
1、在handler文件中定义五个函数及一个数字
def f1(): print("F1") def f2(): print("F2") def f3(): print("F3") def f4(): print("F4") def f5(): print("F5") f0 = 9
2、然后新建一个run文件。根据input的数字去调对应的函数
from types import FunctionType import handler while True: print(""" 系统支持的函数有: 1.f1 2.f2 3.f3 4.f4 5.f5 6.f6 """) val = input("请输入要执行的函数:") if hasattr(handler, val): # 判断是否输入正常 func_or_val = getattr(handler, val) # 根据字符串为参数,去模块中寻找与之同名的成员 if isinstance(func_or_val, FunctionType): func_or_val() else: print(func_or_val) else: print('不存在输入的属性名') # 总结。根据字符串为参数(第二个参数),去对象(第一个参数)中寻找与之同名的成员
当数据量比较庞大时,不可能写一堆的判断,此时反射就显得尤为重要。
总结:
什么是反射:以字符串为参数(第二个参数),去对象中(第一个参数)找与之同名的成员(一句话概括:通过字符串的形式操作对象相关的属性)
2、md5加密
在python中md5加密依赖于hashlib模块
平常的md5加密,很容易被撞库破解。这时候需要加盐。
简单例子如下:
import hashlib SALT = b'asdasd' def md5(pwd): obj = hashlib.md5(SALT) # 加盐 SALT obj.update(pwd.encode('utf-8')) # 获取密文 v = obj.hexdigest() return v
# 由于md5是不可逆的,所以md5的解密。是拿已加密的数据和明文进行加密,然后进行比对,从而得出结论。
3、日志。
之前已经写过一次了,不重复了。