【发布时间】:2019-01-02 07:40:57
【问题描述】:
我有一个对象列表,它们有一个名为 process 的方法。在 Python 2 中可以做到这一点
map(lambda x: x.process, my_object_list)
在 Python 3 中,这将不起作用,因为 map 在遍历 iterable 之前不会调用该函数。可以这样做:
list(map(lambda x: x.process(), my_object_list))
但是你会用一次性列表浪费内存(如果列表很大,就会出现问题)。我也可以使用 2 行显式循环。但是这种模式对我来说太常见了,我不想或者认为我应该每次都写一个循环。
在 Python 3 中是否有更惯用的方法来做到这一点?
【问题讨论】:
-
仅供参考,您并不真的需要 lambda。假设
x的类型是X,那么map(X.process, list_of_objects)可以正常工作 -
@DeepSpace 做假设通常是不好的,而支持多态性通常是好的(:
-
如果你不想每次都写两行代码,把这两行代码塞进一个函数里。这就是函数的用途。
-
"In Python 3... map doesn't call the function until the iterable is traversed."后跟:"But then you waste memory with a throwaway list..."只是想确保您确实了解在 Python 2 中,被丢弃的list仍然是这种情况。在 3 中切换到迭代器是一个很大的改进。无论如何:只需使用 for 循环。没有优越的成语。
标签: python python-3.x list methods