我想创建一个
string_variable
的散列。
在Python2中:
def get_hash_python2(string_variable):
import hashlib
m = hashlib.md5()
m.update(string_variable) # this takes string as argument
return m.digest()
在Python3中:
def get_hash_python3(string_as_bytes)
import hashlib
m = hashlib.md5()
m.update(string_as_bytes) # this takes bytes as argument
return m.digest()
如何编写单个
get_hash
函数来获取与 Python2和 Python3 兼容的
string_variable
的哈希值?
使用
str.encode
将字符串变量转换为hashlib可接受的适当形式
Python2 和 Python3
import hashlib
def get_hash(string_variable):
m = hashlib.md5()
m.update(string_variable.encode())
return m.digest()
如果我没记错的话,在 python3 中
m.update(b"string_as_bytes")
当我编写代码以在 Python2 或 Python3 中运行时,我通常会同时拥有一个 Python2 版本和一个不同的 Python3 版本,在一个
if
中检查哪个版本。我通常会在版本测试中作弊,例如:
if bytes == str:
def my_function():
...
# Python2 version of code goes here.
...
else:
def my_function():
...
# Python3 version of code goes here.
...
本版本测试仅适用于Python2的2.6和2.7版本
要转换其中只有 0 到 255 之间数值的字符串,您可以这样做:
bytes_var = bytes(ord(x) for x in str_var)
这只适用于 Python3。通过将
bytes
更改为 bytearray
它在 Python2 和 Python3 中都有效。