python - 使用 float 为 Python RNG 播种是否安全?

标签 python python-2.7 random

浮点值可以作为参数传递给 random.seed() 吗?这是否会带来不可预见的问题?

换句话说。是……

random.seed(0.99999999)
<use a few thousand random numbers>
random.seed(1)
<use a few thousand random numbers>

...功能上等同于...

random.seed(0)
<use a few thousand random numbers>
random.seed(1)
<use a few thousand random numbers>

快速测试表明两组代码都运行良好,并且从表面上看,输出似乎是独立且确定的。

我很想知道在种子集之间的独立性很重要的情况下使用这种种子方法是否完全安全。获得确定性结果也很重要。我检查了一些文档:Python 2.7 documentationPython 3.8 documentation并进行了一些谷歌搜索,只发现对用作种子的整数(或转换为整数的其他数据类型)的引用。我看不到任何对 float 的引用,这让我想知道它们是否“安全”,因为它们以可预测的方式工作,没有令人讨厌的意外。

我目前正在使用 Python 2.7,但也对更现代版本的答案感兴趣。

最佳答案

使用 float 作为种子是预期的功能:

supported seed types are: None, int, float, str, bytes, and bytearray.

参见:https://github.com/python/cpython/blob/master/Lib/random.py#L156

每次获得完全相同的浮点值对于获得相同的种子至关重要,但这并不太困难。始终获得相同浮点值的最可靠方法是不对它进行任何计算,或接受任何用户输入。如果你想保证完全控制,可以使用 struct.unpack从原始二进制数据生成 float 。

关于python - 使用 float 为 Python RNG 播种是否安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60420631/

相关文章:

python - 零填充数据帧正向填充

转义十六进制的 Python 字符串

python - 无法在 Google App Engine Windows 上运行 Hello World

C 随机数生成(纯 C 代码,无库或函数)

Python "ImportError: No module named"问题

python - 如何用原始类中的包装器调用替换每个函数调用?

python - flask 正确配置日志记录

python - 装饰器错误 : NoneType object is not callable

java - 有没有办法在另一种方法中使用随机数组方法中的现有变量?

python - Reddit 机器人 : random reply to comments