Python文档精要研读系列:hash函数
hash(object)
Return the hash value of the object (if it has one). Hash values are integers. They are used to quickly compare dictionary keys during a dictionary lookup. Numeric values that compare equal have the same hash value (even if they are of different types, as is the case for 1 and 1.0).
Python中的hash函数用于求取一个字符串或者数值的哈希值,由于Python中任何数据类型都可以转换为字符串,所以我们利用这个函数来进行简单的哈希值计算,比如:
hash('test')
如此便可以求得字符串'test'的哈希值,同样,如果是数值的话:
hash(1)
不但如此,我们也可以求取list的哈希值:
hash(str([1,2,3]))
也可以求得字典的,但是由于字典本身无序(集合也是如此),所以需要加一些小的变动:
hash(str(sorted({'1':1})))
先将字典排序,而后转为字符串,最后求得哈希值。 倘若是字典嵌套字典,可以对其中的每一个子字典求哈希值,而后求和:
#Return hash for a dict which may contain a dict as its value
def DHash(Dict):
dh=0
for tmp in Dict:
if isinstance(Dict[tmp],dict):
dh+=hash(tmp)+hash(str(sorted(Dict[tmp],key=lambda d: d[0])))
else:
dh+=hash(tmp)+hash(str(Dict[tmp]))`
return dh
名词解释
hash
散列函数(或散列算法,又称哈希函数,英语:Hash Function)是一种从任何一种数据中创建小的数字“指纹”的方法。散列函数把消息或数据压缩成摘要,使得数据量变小,将数据的格式固定下来。该函数将数据打乱混合,重新创建一个叫做散列值(hash values,hash codes,hash sums,或hashes)的指纹。散列值通常用来代表一个短的随机字母和数字组成的字符串。好的散列函数在输入域中很少出现散列冲突。在散列表和数据处理中,不抑制冲突来区别数据,会使得数据库记录更难找到。
MD4
MD4是麻省理工学院教授Ronald Rivest于1990年设计的一种信息摘要算法。它是一种用来测试信息完整性的密码散列函数的实行。其摘要长度为128位。这个算法影响了后来的算法如MD5、SHA家族和RIPEMD等。
MD5
MD5消息摘要算法(英语:MD5 Message-Digest Algorithm),一种被广泛使用的密码散列函数,可以产生出一个128位(16字节)的散列值(hash value),用于确保信息传输完整一致。MD5由罗纳德·李维斯特设计,于1992年公开,用以替换MD4算法。这套算法的程序在 RFC 1321 中被加以规范。
- 想弄一台简单的区块链服务器?来这里看看!!
- NNabla:索尼开源的一款神经网络框架
- 黑客与C语言
- 浅谈分布式事务
- 漫谈千亿级数据优化实践:一次数据优化实录
- Facebook开源游戏平台ELF:一个用于实时战略游戏研究的轻量级平台
- 用不到50行的Python代码构建最小的区块链
- 学习笔记CB002:词干提取、词性标注、中文切词、文档分类
- 深入浅出 Retrofit,这么牛逼的框架你们还不来看看?
- 用Python从零开始构建反向传播算法
- 备战CDA数据分析竞赛!Kaggle赛题大揭秘
- 如何用Python将时间序列转换为监督学习问题
- Spring MVC的配置和使用
- Java可以如何实现文件变动的监听
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Flutter下Android Studio配置gradle的方法
- Flutter 实现整个App变为灰色的方法示例
- Android studio开发小型对话机器人app(实例代码)
- php中的钩子理解及应用实例分析
- AndroidX下使用Activity和Fragment的变化详解
- PHP Primary script unknown 解决方法总结
- PHP如何将图片文件上传到另外一台服务器上
- android实现滑动解锁
- laravel框架模板之公共模板、继承、包含实现方法分析
- Android项目实战之百度地图地点签到功能
- PHP Redis扩展无法加载的问题解决方法
- PHP 文件上传限制问题
- Flutter permission_handler 权限插件的使用详解
- Flutter使用JsBridge方式处理Webview与H5通信的方法
- flutter 怎么实现app整体灰色效果