-4

是否有 Python 库可以像 os.urandom 一样快速生成随机数据,但如果给定种子,数据可以被复制?

4

1 回答 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 回答