【发布时间】:2018-07-08 20:16:44
【问题描述】:
我正在编写一个专门的单元测试工具,它需要保存测试结果以供将来比较。因此,我需要能够始终如一地将传递给每个测试的参数映射到测试结果,该测试结果是使用每个版本的这些参数运行测试函数。我希望有一种方法可以对元组进行哈希处理,并使用该哈希来命名我存储测试结果的文件。
我的第一个冲动只是在参数元组上调用 hash(),但当然这不会起作用,因为 hash 现在在解释器实例之间是随机的。
我很难想出一种适用于元组中可能存在的任意元素的方法(我想将其限制为整数、浮点数、字符串和列表的混合)这三个元组会好好地)。有什么想法吗?
我曾考虑过使用元组的repr 或对其进行酸洗,但不能保证 repr 为相同的输入产生逐字节相同的输出,而且我认为酸洗也不是(是吗?)
我已经看过this,但答案都是基于不再成立的相同假设,无论如何也不会真正转化为这个问题,很多讨论都是关于使哈希不取决于订单项目的出现,我确实希望哈希取决于订单。
【问题讨论】:
-
我会将参数的元组和腌制到同一个文件中,该文件的名称是参数的散列元组。这样,您不必担心随机化,因为原始元组在文件中。
-
@DYZ 对,我也在这样做,但我需要重复地对元组进行哈希处理,以便能够首先找到文件。
-
@ShadowRanger 我想这...会起作用,但它非常不雅,而且从技术上讲,有人可以使用特制的合并请求对我的 CI 服务器进行 DOS 操作。
-
@Schilcote:所以如果这是一个面向公众的服务器,那是个坏主意;这个问题听起来好像这只是用于可重复的(假设是本地的)单元测试。