是否有 Python 库可以像 os.urandom 一样快速生成随机数据,但如果给定种子,数据可以被复制?
问问题
281 次
1 回答
1
您可以使用它random.seed
来产生可重现的序列。唯一的问题是让 Python 快速生成随机字节。您可以使用@jfs 观察到的技巧random.getrandbits
来减少 Python 必须执行的处理量:
import random
def almost_urandom(n):
return random.getrandbits(8 * n).to_bytes(n, 'big')
random.seed
让您确定性地生成字节:
In [26]: random.seed(0)
In [27]: almost_urandom(10)
Out[27]: b'\xc2\tb\x9fo\xbe\xd8,\x07\xcd'
In [28]: almost_urandom(10)
Out[28]: b'\n]k\xaa\x94U\xe3\xe7\x06\x82'
In [29]: random.seed(0)
In [30]: almost_urandom(10)
Out[30]: b'\xc2\tb\x9fo\xbe\xd8,\x07\xcd'
In [31]: almost_urandom(10)
Out[31]: b'\n]k\xaa\x94U\xe3\xe7\x06\x82'
它的运行速度比os.urandom()
我快一个数量级,即使n
是数百万。
于 2018-04-02T23:00:43.720 回答