我正在编写一个专门的单元测试工具,需要保存测试结果以便将来进行比较。因此,我需要能够一致地将传递给每个测试的参数映射到使用每个版本的这些参数运行测试函数的测试结果。我希望有一种方法可以对元组进行散列并使用该散列来命名存储测试结果的文件。
我的第一个冲动只是调用hash()参数元组,但是这当然行不通,因为hash现在在解释器实例之间是随机的。
我很难想出一种适用于元组中可能存在的任意元素的方法(我想将其限制为整数、浮点数、字符串和这三个元素的列表\元组的混合就可以了) 。有任何想法吗?
我想过使用repr元组的或对其进行酸洗,但 repr 不能保证为相同的输入产生逐字节相同的输出,而且我认为酸洗也不是(是吗?)
我已经看到了这一点,但答案都是基于相同的假设,该假设不再成立,并且无论如何也不会真正转化为这个问题,很多讨论都是关于使哈希不依赖于订单项出现,我确实希望哈希取决于顺序。
不确定我是否完全理解你的问题,但会尝试一下。
在进行哈希之前,只需将结果序列化为 JSON 字符串,然后对 JSON 字符串进行哈希计算即可。
params = (1, 3, 2)
hashlib.sha224(json.dumps(params)).hexdigest()
# '5f0f7a621e6f420002d54ee28b0c169b8112ef72d8a6b60e6a25171c'
Run Code Online (Sandbox Code Playgroud)
如果您的参数是字典,请使用 sort_keys=True 来确保您的键已排序。
params = {'b': 123, 'c': 345}
hashlib.sha224(json.dumps(params, sort_keys=True)).hexdigest()
# '2e75966ce3f1185cbfb4eccc49d5552c08cfb7502a8765fe1dce9303'
Run Code Online (Sandbox Code Playgroud)