Python中列表元素为类对象时如何正确使用map函数调用类方法
问题原因
Python 3 中map返回的是惰性迭代器,只有当你主动遍历这个迭代器时,内部封装的函数才会被逐个执行。你只写了map(lambda x:x.reset(), obj_lst)没有消费迭代器,因此所有reset方法都没有实际被调用,自然不会生效。
正确实现方式
方案1:直接转列表触发执行(简单直接)
将map的返回值转为list即可触发所有方法执行,注意因为reset没有返回值,最终得到的是全None的无用列表,仅适合列表长度不大的场景:
list(map(lambda x: x.reset(), obj_lst))
方案2:无额外内存开销实现(适合大列表)
用collections.deque消费迭代器,设置maxlen=0不会存储任何执行结果,内存开销几乎为0:
from collections import deque deque(map(lambda x: x.reset(), obj_lst), maxlen=0)
方案3:更高效的无lambda写法
用operator.methodcaller替代lambda调用指定方法,性能略优于lambda写法:
from operator import methodcaller from collections import deque deque(map(methodcaller('reset'), obj_lst), maxlen=0)
额外说明
如果你只是需要执行修改对象属性的副作用逻辑,原生for循环的可读性远高于map写法,没必要单纯为了追求语法而改用map,反而会提升其他开发者的理解成本。
内容的提问来源于stack exchange,提问作者haneulkim
相关产品推荐
相关产品推荐

