第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Python random.Random(bytearray) TypeError:

Python random.Random(bytearray) TypeError:

慕桂英3389331 2021-09-14 16:00:30
在 Python3 中,random.Random(seed) 允許使用字節(jié)數(shù)組進行播種。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')        ...當(dāng)你嘗試>>> random.Random().__init__(bytearray([1, 2, 3]))或者>>> r = random.Random()>>> r.seed(bytearray([1, 2, 3]))它會毫無例外地工作。但是當(dāng)你嘗試這個時,結(jié)果是不一致的。>>> random.Random(bytearray([1, 2, 3]))TypeError: unhashable type: 'bytearray'我編譯并調(diào)試了 python 3.7.0 二進制文件,當(dāng)嘗試用字節(jié)數(shù)組初始化 PRNG 時,它會調(diào)用random_seedModules/_randommodule.c 中的方法并在此處直接引發(fā)類型錯誤。為什么?
查看完整描述

2 回答

?
蕪湖不蕪

TA貢獻1796條經(jīng)驗 獲得超7個贊

異常不是來自Random.__init__()方法,而是來自__new__()之前調(diào)用的方法__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>


查看完整回答
反對 回復(fù) 2021-09-14
?
精慕HU

TA貢獻1845條經(jīng)驗 獲得超8個贊

BlackJack 的回答啟發(fā)了我。我仔細(xì)閱讀了該方法的C源代碼_random.Random.__new__

_random.Random.__new__(方法random_newC)中調(diào)用_random.Random.seed方法(random_seed使用相同的參數(shù)中C)。如果argsrandom_seed功能包含非int對象作為一個種子,它會嘗試獲得哈希值的對象。因此,當(dāng)對象是字節(jié)數(shù)組時,它會引發(fā)類型錯誤。

因此,_random.Random并沒有專門處理 bytearray 的播種,但它的子類random.Random做了,這似乎是一個不兼容的 python 錯誤。


查看完整回答
反對 回復(fù) 2021-09-14
  • 2 回答
  • 0 關(guān)注
  • 260 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號