gpt4 book ai didi

Python random.Random(bytearray) 类型错误 : unhashable type

转载 作者:太空狗 更新时间:2023-10-29 21:07:58 26 4
gpt4 key购买 nike

在 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]))

它将无一异常(exception)地工作。

但是当你尝试这样做时,结果是不一致的。

>>> random.Random(bytearray([1, 2, 3]))
TypeError: unhashable type: 'bytearray'

我编译并调试了 python 3.7.0 二进制文件,当尝试使用字节数组初始化 PRNG 时,它将调用 Modules/_randommodule.c 中的 random_seed 方法并直接在此处引发类型错误。为什么?

最佳答案

异常不是来自Random.__init__()方法,而是来自__new__()方法,它在__init__()<之前被调用:

>>> random.Random.__new__(random.Random, bytearray([1,2,3]))
TypeError: unhashable type: 'bytearray'
>>> random.Random.__new__(random.Random, bytes([1,2,3]))
<random.Random at 0x1b0cd78>

关于Python random.Random(bytearray) 类型错误 : unhashable type,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53729279/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com