random - 为什么种子在 python 版本之间不稳定?

  显示原文与译文双语对照的内容
0 0

我试着从Python重新产生一个随机序列, random.random()在不同的系统使用不同的Python3版本安装。

这应该是很简单,只说 文档:?

大多数的random模块的算法和种子函数Python版本之间可能有所改变,但两个方面是一定不会改变:

  • 如果新的散播方法,接下来添加一个向后兼容的播种机将被提供。
  • 发电机是random( ) 方法将继续提供兼容的播种机时相同的种子生成相同的序列。

所以我希望接下来的代码来打印特定Python3总是相同的10个号码,无论版本:

import sys
print(sys.version)
from random import seed, random
seed(str(1))
for i in range(10):
    print(random())

但两台不同的计算机上对其进行测试:

3.2.3 (default, May  3 2012, 15:51:42) 
[GCC 4.6.3]
0.4782479962566343
0.044242767098090496
0.11703586901195051
0.8566892547933538
0.2926790185279551
0.0067328440779825804
0.0013279506360178717
0.22167546902173108
0.9864945747444945
0.5157002525757287

3.1.2 (release31-maint, Dec  9 2011, 20:59:40)  
[GCC 4.4.5]
0.0698436845523
0.27772471476
0.833036057868
0.35569897036
0.36366158783
0.722487971761
0.963133581734
0.263723867191
0.451002768569
0.0998765577881

提供不同的结果。

这是为什么? 然后有什么办法使我才能使用这个功能( 如果不包含。 会得到相同的随机序列,两次- 1 ),

时间:原作者:4个回答

0 0

我在浏览的新增Python 3 .2 ( 由于这个问题),我发现:

随机.seed( ) 函数和方法现在 salt字符串种子与SHA512哈希函数。 若要访问早期版本的种子才能重现Python 3 .1序列,将version参数为1,设置随机.seed( s,version=1 ) 。

似乎属于重大更改( 从3 .1为3 。2 ) 与向后兼容选项。

( 如borrible指出,因为兼容播种机提供的文档协定还没有违反了)

原作者:
0 0

医生。 seed说他们使用哈希函数将字符串转换为有效输入种子。 当我测试了各种版本的Python2 .X ( 目前没有3 安装),某些版本给不同的值。 hash(str(1))请注意,种子的医生说无论是哪个版本,它们使用 hash值字符串。 你可能希望传递一个int来替代( 除了@pst点有关使用向后兼容版本的种子) 。

ids - jcc - other random3 的模块文档 .2:

如果x 是一个int,它是直接使用。

在版本2 ( 默认值),str,bytes或bytearray对象被转换为int并使用它的所有位。 使用版本1,则使用x 的hash( ) 代替。

( x 这是种子的初始值设定项中)

原作者:
...