debugging 如何使Python具有可复制性?[副本]

kpbwa7wx  于 2023-06-23  发布在  Python
关注(0)|答案(1)|浏览(82)

此问题已在此处有答案

Disable hash randomization from within python program(3个答案)
3年前关闭。
我在调试python代码时惊讶地发现它并不总是产生相同的输出。具体地说,在某个时刻,我从一个集合中选择一个随机元素,把它变成一个列表,并取第一个元素,但我并不总是得到相同的元素。
此代码演示了该行为。

class Foo():
    def __init__(self,n):
        self.n = n
}
    def __repr__(self):
        return "<{}>".format(self.n)

print(list(set(Foo(i) for i in (1,2,3))))'''

It sometimes produces [<3>, <1>, <2>] and sometimes [<1>, <2>, <3>]

我尝试在执行前调用random.seed(),但没有效果
这是不相关的,但在我的实际问题中,我通过重复选择一个未处理的节点并从该节点进行泛洪填充来将图分离为连接的组件。我的代码选择随机节点来启动过程,因此组件以不同的顺序计算,这使得调试代码更加困难,组件的工作和顺序可能会有所不同。
我知道我可以通过在选择列表中的第一个节点之前对节点列表进行排序来强制可重复性,但这会引入不必要的开销。我是否天真地认为计算机语言的基本原则是它应该在相同的输入上始终表现相同?

flmtquvp

flmtquvp1#

如果您使用的是random模块,您可以通过调用函数random.seed()以特定值初始化来强制它始终生成相同的伪随机值序列。
我通常使用random.seed(42),但一些其他值就可以了。
这很有用,因为它通常使测试更容易。

相关问题