Python : 3.7.3
OS : Ubuntu 18.04.2 LTS
IDE : pycharm-community-2019.1.3
Conda : 4.7.5
typesetting : Markdown
code
"""
@Author : 行初心
@Date : 2019/7/2
@Blog : www.cnblogs.com/xingchuxin
@Gitee : gitee.com/zhichengjiu
"""
def main():
print(hash(1234556))
print("---")
print(hash("Traditional"))
print("---")
print(hash((1, 2, 3, 4)))
# list
print(hash([1, 2]))
if __name__ == '__main__':
main()
result
/home/coder/anaconda3/envs/py37/bin/python /home/coder/PycharmProjects/Base/demo.py
Traceback (most recent call last):
File "/home/coder/PycharmProjects/Base/demo.py", line 25, in
main()
File "/home/coder/PycharmProjects/Base/demo.py", line 21, in main
print(hash([1, 2]))
TypeError: unhashable type: 'list'
1234556
---
-4302454725068395101
---
485696759010151909
Process finished with exit code 1
more_knowle
python中 hash(o) 接收一个 不可变类型 的数据作为参数,提取数据的特征码
特征码是整数
相同的数据 -> 相同的结果
运行 print(hash("Traditional")) 多次,可以得到不同的结果。想要了解这个现象背后的原因,需要学习hash运算的原理。
在运行时发现了一个现象:相同字符串在同一次运行时的哈希值是相同的,但是不同次运行的哈希值不同。这是由于Python的字符串hash算法有一个启动时随机生成secret prefix/suffix的机制,存在随机化现象:对同一个字符串输入,不同解释器进程得到的hash结果可能不同。因此当需要做可重现可跨进程保持一致性的hash,需要用到hashlib模块。[1]
reference
[1] https://www.cnblogs.com/yucen/p/9343552.html
[2] https://www.cnblogs.com/yucen/p/9343552.html
[3] https://oomake.com/question/4955491
[4] https://www.oschina.net/question/855532_2159818
source_code
def hash(*args, **kwargs): # real signature unknown
"""
Return the hash value for the given object.
Two objects that compare equal must also have the same hash value, but the
reverse is not necessarily true.
"""
pass
resource
[文档 - English] docs.python.org/3
[文档 - 中文] docs.python.org/zh-cn/3
[规范] www.python.org/dev/peps/pep-0008
[规范] zh-google-styleguide.readthedocs.io/en/latest/google-python-styleguide/python_language_rules
[源码] www.python.org/downloads/source
[ PEP ] www.python.org/dev/peps
[平台] www.cnblogs.com
[平台] gitee.com
Python具有开源、跨平台、解释型、交互式等特性,值得学习。
Python的设计哲学:优雅,明确,简单。提倡用一种方法,最好是只有一种方法来做一件事。
代码的书写要遵守规范,这样有助于沟通和理解。
每种语言都有独特的思想,初学者需要转变思维、踏实践行、坚持积累。