如何强制python具有可复制性?

2024-04-19 22:52:13 发布

您现在位置:Python中文网/ 问答频道 /正文

我在调试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(0),但没有效果

这不相关,但在我的实际问题中,我通过反复选择一个未处理的节点并从该节点进行泛洪填充,将一个图分离为连接的组件。我的代码选择随机节点来启动这个过程,因此组件的计算顺序不同,这使得调试代码更加困难,组件的工作方式和顺序可能会有所不同

我知道在选择列表中的第一个节点之前,我可以通过对节点列表进行排序来强制实现可再现性,但这会带来不必要的开销。我是否天真地认为计算机语言的一个基本原则是,它应该在相同的输入上始终表现相同


Tags: 代码self元素列表return节点foo顺序
1条回答
网友
1楼 · 发布于 2024-04-19 22:52:13

如果您使用的是random模块,则可以通过使用特定值调用函数^{}来初始化它,从而强制它始终生成相同的伪随机值序列

我通常使用random.seed(42),但是其他一些值就可以了

这是有用的,因为它通常使测试更容易

相关问题 更多 >