廖雪峰Python学习笔记day11

学习笔记day10

# python study day11

# collections 内建集合模块
# namedtuple 创建自定义tuple对象,规定tuple元素个数,使用属性引用元素
# from collections import namedtuple
# Point = namedtuple('Point', ['x', 'y'])
# p = Point(1, 3)
# p2 = Point(-1, -3)
# print(p.x, p.y) #>>> 1 3
# deque 双向list列表,支持appendleft()和popleft()在头部添加删除元素
# from collections import deque
# q = deque(['a', 'b', 'c'])
# q.appendleft('y')
# print(q) #>>> deque(['y', 'a', 'b', 'c'])
# defaultdict key不存在,返回自定义默认值
# from collections import defaultdict
# dd = defaultdict(lambda : 'N/A') # 参数函数
# print(dd['nokey']) #>>> 'N/A
# OrderedDict 按照插入顺序排序。可以实现一个FIFO(先进先出)
# from collections import OrderedDict
# d = OrderedDict([('a',1), ('c',2), ('b',3)])
# ChainMap 实现参数的优先级查找,先查命令行参数,再查环境变量,最后使用默认参数
# from collections import ChainMap
# import os, argparse
# # 构造缺省参数:
# defaults = {
#     'color': 'red',
#     'user': 'guest'
# }
# # 构造命令行参数:
# parser = argparse.ArgumentParser()
# parser.add_argument('-u', '--user')
# parser.add_argument('-c', '--color')
# namespace = parser.parse_args()
# command_line_args = { k: v for k, v in vars(namespace).items() if v }
# # 组合成ChainMap:
# combined = ChainMap(command_line_args, os.environ, defaults)
# # 打印参数:
# print('color=%s' % combined['color'])
# print('user=%s' % combined['user'])
# # 同时传入命令行参数和环境变量,命令行参数的优先级较高:
# # $ user=admin color=green python3 use_chainmap.py -u bob
# # color=green
# # user=bob
# Counter 计算器
# from collections import Counter
# print(Counter('hello')) #>>> Counter({'l': 2, 'h': 1, 'e': 1, 'o': 1})
# c = Counter()
# for ch in 'world':
#     c[ch] += 1
# c.update('hello')
# print(c) #>>> Counter({'l': 3, 'o': 2, 'w': 1, 'r': 1, 'd': 1, 'h': 1, 'e': 1})

# Base64 是一种任意二进制到文本字符串的编码方法,常用于URL、Cookie、网页传输少量二进制数据
# import base64
# print(base64.b64encode(b'binary\x00string'))
# #>>> b'YmluYXJ5AHN0cmluZw==' 二进制数不是3的倍数自动补足,'='号表示补的字节,解码会去掉
# # url safe base64编码解决字符+和/在URL中不能直接作为参数,替换为-和_
# print(base64.b64encode(b'i\xb7\x1d\xfb\xef\xff')) #>>> b'abcd++//'
# print(base64.urlsafe_b64encode(b'i\xb7\x1d\xfb\xef\xff')) #>>> b'abcd--__'
# base64.urlsafe_b64decode('abc--__')
# 去掉=的base64解码函数(Base64把3个字节变成4个字节,Base64编码永远是4的倍数)
# import base64
# def saef_base64_decode(s):
#     s += (len(s) % 4) * (b'=')
#     return base64.b64decode(s)
# assert b'abcd' == safe_base64_decode(b'YWJjZA=='), safe_base64_decode('YWJjZA==')

# struct模块解决bytes和其他二进制数据类型的转换
# import struct
# print(struct.pack('>I', 10240099)) # pack把任意数据类型变成bytes
# # '>'表示字节顺序是big-endian,'I'表示4字节无符号整数 >>> b'\x00\x9c@c' 
# print(struct.unpack('>IH', b'\xf0\xf0\xf0\xf0\x80\x80'))
# # IH表示依次变为I:4字节无符号整数和H:2字节无符号整数
# import struct
# # 取BMP Windows位图文件前30个字节
# s = b'\x42\x4d\x38\x8c\x0a\x00\x00\x00\x00\x00\x36\x00\x00\x00\x28\
#     x00\x00\x00\x80\x02\x00\x00\x68\x01\x00\x00\x01\x00\x18\x00'
# print(struct.unpack('<ccIIIIIIHH', s))
# #>>> (b'B', b'M', 691256, 0, 54, 40, 640, 360, 1, 24) 
# # b'B'、b'M'说明是Windows位图,大小为640x360,颜色数为24
# -*- coding: utf-8 -*-
# import base64, struct
# bmp_data = base64.b64decode('Qk1oAgAAAAAAADYAAAAoAAAAHAAAAAoAAAABABAAAAAAADICAAASCwAAEgsAA' +
#                    'AAAAAAAAAAA/3//f/9//3//f/9//3//f/9//3//f/9//3//f/9//3//f/9//3//f/9//3/' +
#                    '/f/9//3//f/9//3//f/9/AHwAfAB8AHwAfAB8AHwAfP9//3//fwB8AHwAfAB8/3//f/9/A' +
#                    'HwAfAB8AHz/f/9//3//f/9//38AfAB8AHwAfAB8AHwAfAB8AHz/f/9//38AfAB8/3//f/9' +
#                    '//3//fwB8AHz/f/9//3//f/9//3//f/9/AHwAfP9//3//f/9/AHwAfP9//3//fwB8AHz/f' +
#                    '/9//3//f/9/AHwAfP9//3//f/9//3//f/9//38AfAB8AHwAfAB8AHwAfP9//3//f/9/AHw' +
#                    'AfP9//3//f/9//38AfAB8/3//f/9//3//f/9//3//fwB8AHwAfAB8AHwAfAB8/3//f/9//' +
#                    '38AfAB8/3//f/9//3//fwB8AHz/f/9//3//f/9//3//f/9/AHwAfP9//3//f/9/AHwAfP9' +
#                    '//3//fwB8AHz/f/9/AHz/f/9/AHwAfP9//38AfP9//3//f/9/AHwAfAB8AHwAfAB8AHwAf' +
#                    'AB8/3//f/9/AHwAfP9//38AfAB8AHwAfAB8AHwAfAB8/3//f/9//38AfAB8AHwAfAB8AHw' +
#                    'AfAB8/3//f/9/AHwAfAB8AHz/fwB8AHwAfAB8AHwAfAB8AHz/f/9//3//f/9//3//f/9//' +
#                    '3//f/9//3//f/9//3//f/9//3//f/9//3//f/9//3//f/9//3//f/9//38AAA==')
# def bmp_info(data):
#     if data[:2] == b'BM':
#         pic = struct.unpack('<ccIIIIIIHH', data[:30])
#         return {
#             'width': pic[-4],
#             'height': pic[-3],
#             'color': pic[-1]
#         }
#     else:
#         raise TypeError('Not a BMP file!')
# bi = bmp_info(bmp_data)
# assert bi['width'] == 28
# assert bi['height'] == 10
# assert bi['color'] == 16
# print('ok')

# hashlib 摘要算法又称哈希算法、散列算法。如 MD5、SHA1;比较安全的SHA256、SHA512(但效率低)
# 对内容加密防止获取或计算摘要检测篡改
# import hashlib
# md5 = hashlib.md5()
# md5.update('how to use md5 in python hashlib?'.encode('utf-8')) # 与下述效果一致
# # md5.udate('how to use md5'.encode('utf-8')) md.update('in python hashlib'.encode('utf-8'))
# print(md5.hexdigest()) # 32w位16进制数字符串表示>>> d26a53750bc40b38b65a520292f69306 
# sha1 = hashlib.sha1()
# sha1.update('how to use sha1'.encode('utf-8')) 
# print(sha1.hexdigest()) # 40位16进制字符串表示 >>> 625b0c42c9373712fbe043348cd38e7c77ef58ff
# -*- coding: utf-8 -*-
# db = {
#     'michael': 'e10adc3949ba59abbe56e057f20f883e',
#     'bob': '878ef96e86145580c38c87f0410ad153',
#     'alice': '99b1c2188db85afee403b1536010c2c9'
# }
# import hashlib
# def login(user, password):
#     pw = hashlib.md5()
#     pw.update(password.encode('utf-8'))
#     return db[user] == pw.hexdigest()
# print(login('michael', '123456'))
# 对弱口令避免逆推可以添加额外字符,俗称“加盐”。对相同密码表现不同摘要可以考虑添加不可变的账号
# def calc_md5(password):
#     return get_md5(password + 'the-Salt')

# hmac 可代替以上salt算法
# import hmac
# message = b'hello, world!'
# key = b'secret'
# h = hmac.new(key, message, digestmod='md5') # key,message都是bytes类型,也可以h.update()
# print(h.hexdigest()) #>>> 9bdf721671202655abb36113919a2946

在这里插入图片描述
学习笔记day12

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值