【发布时间】:2020-03-04 18:37:17
【问题描述】:
以下代码在 Python 2 和 Python 3 中的行为不同:
all(map(lambda x,y: x, [1, 2], [1, 2, 3]))
Python 2 给出 False 而 Python 3 给出 True。 Python 2 的 documentation 表示,如果较短的列表用完,它将提供 None,但 Python 3 doesn't 会这样做。
我正在编写一个出于某种原因确实需要保持长度的代码。获得旧行为的最干净的方法是什么?我知道我可以使用from past.builtin import map as old_map,但是有没有更优雅的解决方案可以同时在这两个版本中使用?
【问题讨论】:
-
你能重写代码吗?或许不使用不同的结构就将该功能放在一个函数中?
-
为什么不为此使用自己的自定义函数?
-
@JoachimLusiardi 这是一个使用频率很高的小程序...所以我想尽量减少更改。
-
@mrzrm,那我可以用
from past.builtin import map:-) -
您的示例中有多少细节与您的实际操作相匹配?因为
len(list_1) >= len(list_2) and all(list_1)似乎是一种更好的方法来解决您显示的特定问题,而不会弄乱map的向后兼容版本或任何替代版本(如itertools.zip_longest)。
标签: python python-3.x python-2.x