在 Python3 中,random.Random(seed) 允许使用字节数组进行播种。
class Random(_random.Random):
...
def __init__(self, x=None):
self.seed(x)
...
def seed(self, a=None, version=2):
...
if version == 2 and isinstance(a, (str, bytes, bytearray)):
if isinstance(a, str):
a = a.encode()
a += _sha512(a).digest()
a = int.from_bytes(a, 'big')
...
当你尝试
>>> random.Random().__init__(bytearray([1, 2, 3]))
或者
>>> r = random.Random()
>>> r.seed(bytearray([1, 2, 3]))
它会毫无例外地工作。
但是当你尝试这个时,结果是不一致的。
>>> random.Random(bytearray([1, 2, 3]))
TypeError: unhashable type: 'bytearray'
我编译并调试了 python 3.7.0 二进制文件,当尝试用字节数组初始化 PRNG 时,它会调用random_seedModules/_randommodule.c 中的方法并在此处直接引发类型错误。为什么?
芜湖不芜
精慕HU
相关分类