当目标函数使用待遍历列表外的其他参数时如何正确调用map函数
map函数传入额外固定参数的实现方案
你现有写法的报错原因是:map(sum_inc(inc_value= val1), lst1)会直接执行sum_inc(inc_value=val1),将函数返回值传入map,但map第一个参数要求接收可调用对象,因此会触发类型错误。
你可以选择以下任意一种方法实现需求:
- 方法1:使用lambda匿名函数包装目标函数
直接用匿名函数接收map迭代传入的元素,同时传入固定参数即可,示例代码:res_iterator = map(lambda x: sum_inc(lst_to_sum=x, inc_value=val1), lst1) # 如需转为列表,外层加list()即可 res_list = list(res_iterator) - 方法2:使用
functools.partial偏函数固定参数
偏函数可以预先绑定目标函数的部分参数,返回新的可调用对象,刚好适配map的参数要求,示例代码:from functools import partial res_iterator = map(partial(sum_inc, inc_value=val1), lst1) res_list = list(res_iterator) - 方法3:传入等长的固定参数可迭代对象
map支持传入多个可迭代对象,会依次取每个可迭代对象的对应位置元素传入目标函数,你可以把固定参数封装为和迭代列表等长的序列即可:res_iterator = map(sum_inc, lst1, [val1]*len(lst1)) res_list = list(res_iterator)
注意:你示例中的
sum_inc函数逻辑存在适配问题,传入lst1的单个数字元素时,执行dict(lst_to_sum)会触发类型错误,需要调整函数逻辑适配传入的参数类型,该问题和map传参逻辑无关。
内容的提问来源于stack exchange,提问作者Amir Maaoui
相关产品推荐
相关产品推荐

