我正在使用已知的随机种子生成一些测试数据。我想使用来自 cpython 和 jython 的这些数据。我发现如果我使用 jython (2.5.2) 与 cpython,数据会有所不同。
将其归结为一个简单的测试,我可以看到 PRNG 在两种实现中给出了不同的结果:
在 Jython 中:
Jython 2.5.2 (Release_2_5_2:7206, Mar 2 2011, 23:12:06)
[Java HotSpot(TM) Server VM (Sun Microsystems Inc.)] on java1.6.0_26
Type "help", "copyright", "credits" or "license" for more information.
>>> import random
>>> random.seed(1)
>>> random.random()
0.7308781974052877
在 CPython 中:
Python 2.7.2+ (default, Oct 4 2011, 20:03:08)
[GCC 4.6.1] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import random
>>> random.seed(1)
>>> random.random()
0.13436424411240122
我生成的测试数据在每个 python 实现中都是可重现的。有没有解决的办法?也许我需要编写自己的 PRNG?
最佳答案
有办法解决这个问题。两种实现都包括纯python“WichmannHill”PRNG。
它较慢,但在 Jython 和 CPython 中给出相同的结果。
在我的代码中,我替换了
random.seed(1)
uuid += random.choice(hexdigits)
和
rand = random.WichmannHill(1)
uuid += rand.choice(hexdigits)
关于python - Jython random 模块与 cpython 产生不同的结果,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8003460/