我在调试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),但没有效果
这不相关,但在我的实际问题中,我通过反复选择一个未处理的节点并从该节点进行泛洪填充,将一个图分离为连接的组件。我的代码选择随机节点来启动这个过程,因此组件的计算顺序不同,这使得调试代码更加困难,组件的工作方式和顺序可能会有所不同
我知道在选择列表中的第一个节点之前,我可以通过对节点列表进行排序来强制实现可再现性,但这会带来不必要的开销。我是否天真地认为计算机语言的一个基本原则是,它应该在相同的输入上始终表现相同
如果您使用的是} 来初始化它,从而强制它始终生成相同的伪随机值序列
random
模块,则可以通过使用特定值调用函数^{我通常使用
random.seed(42)
,但是其他一些值就可以了这是有用的,因为它通常使测试更容易
相关问题 更多 >
编程相关推荐