__xor__ in functools.reduce() 导致错误
__xor__ in functools.reduce() causing error
我目前在 python 3 中使用 Discord API 工作,我想使用在 python 2 中编写的模块。我正在编辑一些它与 python 一起使用的代码 3. 我想不通的是:
odd_xor = reduce(__xor__, bh) >> 16
这在 python 2 中有效,但在 python 3 中无效。我认为可行的简单修复是:
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)
我真的不明白代码段试图做什么,这就是为什么我很难找到解决这个问题的方法。有什么想法吗?提前致谢!
P.S。如果有python 2个模块和python 3个项目更简单的方法,请赐教。
当作为reduce
的第二个参数传递的序列为空时,会出现上述错误,这意味着发生错误时bh
是一个空序列。
由于 bh
是用另一个序列 hand
初始化的,因此您需要首先找出 hand
为空的原因。
在 Python 3 中,map
returns 是一个惰性迭代器(很像生成器),而不是像在 Python 2 中那样的列表。可能是您遇到问题的原因。
在您的代码中,您执行 map(card_to_binary, hand)
。如果 hand
在你使用结果之前被改变(例如清空),你可能得不到你想要的东西(例如 map
可能最终没有迭代)。
要使代码与 Python 2 相同,您只需在从 map
:
获得的迭代器上调用 list
bh = list(map(card_to_binary, hand))
或者,您可以更改其他修改 hand
的代码,使其做一些不同的事情,也许创建一个新列表,在修改之前复制列表,或者仅在之后修改 hand
reduce
调用已完成。
我目前在 python 3 中使用 Discord API 工作,我想使用在 python 2 中编写的模块。我正在编辑一些它与 python 一起使用的代码 3. 我想不通的是:
odd_xor = reduce(__xor__, bh) >> 16
这在 python 2 中有效,但在 python 3 中无效。我认为可行的简单修复是:
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)
我真的不明白代码段试图做什么,这就是为什么我很难找到解决这个问题的方法。有什么想法吗?提前致谢!
P.S。如果有python 2个模块和python 3个项目更简单的方法,请赐教。
当作为reduce
的第二个参数传递的序列为空时,会出现上述错误,这意味着发生错误时bh
是一个空序列。
由于 bh
是用另一个序列 hand
初始化的,因此您需要首先找出 hand
为空的原因。
在 Python 3 中,map
returns 是一个惰性迭代器(很像生成器),而不是像在 Python 2 中那样的列表。可能是您遇到问题的原因。
在您的代码中,您执行 map(card_to_binary, hand)
。如果 hand
在你使用结果之前被改变(例如清空),你可能得不到你想要的东西(例如 map
可能最终没有迭代)。
要使代码与 Python 2 相同,您只需在从 map
:
list
bh = list(map(card_to_binary, hand))
或者,您可以更改其他修改 hand
的代码,使其做一些不同的事情,也许创建一个新列表,在修改之前复制列表,或者仅在之后修改 hand
reduce
调用已完成。