【发布时间】:2022-01-24 01:21:14
【问题描述】:
我有一些代码:
map(lambda increment:
self.__delete_table_id_range(table, delete_field, value,
delete_interval, increment),
range(delete_interval.min, delete_interval.max, self.purge_range))
在python 2 中它可以正常工作,但在python 3 中我调试过并且从未调用过__delete_table_id_range 函数。
我知道map 现在返回iterator,所以我将map 更改为list:
list(map(lambda increment:
self.__delete_table_id_range(table, delete_field, value,
delete_interval, increment),
range(delete_interval.min, delete_interval.max, self.purge_range)))
只有添加这个__delete_table_id_range 函数才会运行。
我不明白为什么会这样。谁能解释一下?
【问题讨论】:
-
地图迭代器(以及python中的其他迭代器)就是所谓的lazy。
-
因为如果你不迭代迭代器,函数永远不会被调用。
-
您误用了
map。考虑改用 for 循环。 -
更重要的是,您不应该使用
map来获得副作用开始。这应该只是一个for循环 -
map在 Python 2 中是一个返回列表的函数。在 Python 3 中,它是一个实现迭代器协议的 type。
标签: python python-3.x iterator python-2.x