学渣开始写学习博客……
Date 10.18
尾递归只需要在函数被调用前完成返回值的计算就行
但是……
def fact(n):
return fact_iter(n, 1)
def fact_iter(num,product):
if num ==1:
return product
return fact_iter(num-1,num*product)
fact_iter(1000,10)
运行结果却显示栈溢出
然后。。。闭包的作用是什么呢
Date 10.19
hashlib 算法 :通过一个函数将任意长度的字符串转换成一定长度的数据串
直接上用法
import hashlib
md5 = hashlib.md5()
md5.update(‘how to use md5 in ‘.encode(‘utf-8’))
md5.update(‘python hashlib?’.encode(‘utf-8’))
print(md5.hexdigest())
这里如果将
md5.update(‘how to use md5 in ‘.encode(‘utf-8’))
md5.update(‘python hashlib?’.encode(‘utf-8’))
修改为md5.update(”how to use md5 in python hashlib?’.encode(‘utf-8’))
实际输出是一样的
MD5是最常见的摘要算法,速度很快,生成结果是固定的128 bit字节,通常用一个32位的16进制字符串表示。
另一种常见的摘要算法是SHA1,调用SHA1和调用MD5完全类似
SHA1的结果是160 bit字节,通常用一个40位的16进制字符串表示。
比SHA1更安全的算法是SHA256和SHA512,不过越安全的算法不仅越慢,而且摘要长度更长。
note:不同数据通过计算得到相同摘要的可能性很小
HOMEWORK
根据md5写一段验证用户密码的代码
先import hashlib模块,再写个字典储存用户数据
import hashlib
md5 = hashlib.md5()
db = {
‘michael’: ‘e10adc3949ba59abbe56e057f20f883e’,
‘bob’: ‘878ef96e86145580c38c87f0410ad153’,
‘alice’: ‘99b1c2188db85afee403b1536010c2c9’
}
输入用户名与密码,分别判断是否在字典中并且正确
user_name = input(‘please input your user name’)
if user_name not in db.keys():
print(‘fail!’)
else:
user_code = input(‘please input your code ‘)
md5 = hashlib.md5()
md5.update(user_code.encode(‘utf-8’))
if md5.hexdigest() == db[user_name]:
print(‘login!!’)
exit(0)
else:
print(‘failed’)
大致就是这样了
接下来是itertools模块
itertools 模块提供了很多用于操作迭代对象的函数
count(1):所有自然数
cycle(’asd‘):不断重复a,s,d
repeat(‘parameter’,times)
chain():连接一组迭代对象
groupby():调出相邻重复元素放在一起形成几个列表
contextlib
一般读写文件最后都要close,写起来非常麻烦
可以用with解决
with open(path,mode) as f:
f.read
@contextmanager 的用法:
pass 先 …………
”’@contextmanager
def create_query(name):
print(‘Begin’)
q = Query(name)
yield q
print(‘End’)”’
先写作业……