20反射、md5加密、以及日志模块logging(复习)

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、日志。

  之前已经写过一次了,不重复了。

  

  

  

猜你喜欢

转载自www.cnblogs.com/cbslock/p/11230555.html