- 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 <module>
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的設計哲學:優雅,明確,簡單。提倡用一種方法,最好是只有一種方法來做一件事。
代碼的書寫要遵守規范,這樣有助於溝通和理解。
每種語言都有獨特的思想,初學者需要轉變思維、踏實踐行、堅持積累。