【Python】内置函数hash()
1:语法:
1 |
hash(object) |
返回对象的哈希值(如果有)。 哈希值是整数。
2:例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
>>> hash('Hello World!') -5816595827579447876 >>> >>> hash('select * from user_tables;') -1976753584043895441 >>> >>> hash(100) 100 >>> hash('YuJiuTech') -3986064603454886333 >>> >>> hash('Oracle') -6739365094310980693 >>> >>> hash('Python') 5353888918399870961 >>> |
3:两个字符串,有任何的不同,哈希值都不同
对Oracle较熟悉的朋友会知道,Oracle在匹配内存中的SQL语句时是通过哈希值进行匹配的,所以,在写SQL的时候,如果相同的SQL(逻辑上相同),但书写上大小写、空格等不同的话,那么SQL的哈希值是不同的。还有,SQL如果没有绑定变量的话,那么每个SQL的哈希值也都不同,每次都需要硬解析。我们随便举个例子试试。
1 2 3 4 5 6 |
## 我们看只有一个字母大小写的区别,哈希值也是不同的。 >>> hash('select * from user_tables;') -1976753584043895441 >>> hash('Select * from user_tables;') -1471732467117314104 >>> |
4:两个数值比较相等时,哈希值相同
两个值在比较时相等的,数值具有相同的散列值(即使它们具有不同的类型,例如:1和1.0)。
1 2 3 4 5 |
>>> hash(1) 1 >>> hash(1.0) 1 >>> |
5:其他
1 2 3 4 5 6 7 8 9 10 11 12 |
## 元组 >>> hash((1,2,3)) 2528502973977326415 >>> ## 列表 >>> hash(str(['O','r','a','c','l','e'])) 8043644287390967950 >>> ## 字典 >>> hash(str({'Name':'zhangsan','Age': 7})) 5948078563056264274 >>> |