簡體   English   中英

__xor__在functools.reduce()中導致錯誤

[英]__xor__ in functools.reduce() causing error

我目前正在使用Discord API在python 3中工作,並且我想使用以python 2編寫的模塊。我正在編輯一些代碼以使其與python 3一起工作。這個:

odd_xor = reduce(__xor__, bh) >> 16

這適用於python 2,但不適用於python3。我認為可行的簡單解決方法是:

odd_xor = functools.reduce(__xor__, bh) >> 16

但這給了我錯誤:

reduce() of empty sequence with no initial value

bh在這里初始化:

# bh stands for binary hand, map to that representation
card_to_binary = HandEvaluator.Six.card_to_binary_lookup
bh = map(card_to_binary, hand)

我不太了解代碼段要做什么,這就是為什么我很難找到解決這個問題的方法的原因。 有什么想法嗎? 提前致謝!

PS:如果有更簡便的方法將python 2模塊與python 3項目一起使用,請賜教。

當作為reduce的第二個參數傳遞的序列為空時,會發生上述錯誤,這意味着發生錯誤時bh是空序列。

由於bh是用另一個序列hand初始化的,因此您首先需要找出為什么hand為空。

在Python 3中, map返回的是惰性迭代器(非常類似於生成器),而不是它在Python 2中的執行方式列表。這可能是造成問題的原因。

在您的代碼中,執行map(card_to_binary, hand) 如果在使用結果之前改變了hand (例如清空),則可能無法獲得所需的內容(例如, map可能最終沒有進行任何迭代)。

為了使代碼與Python 2相同,您只需在從map獲得的迭代器上調用list即可:

bh = list(map(card_to_binary, hand))

或者,您可以更改其他修改hand代碼,以使其做一些不同的事情,例如創建新列表,在修改列表之前復制列表,或僅在reduce調用完成后就地修改hand

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM