【发布时间】:2020-09-02 22:37:09
【问题描述】:
>>> d = {'a': 1, 'b': 2}
>>> list(map(lambda x: x[0] * x[1], d.items()))
['a', 'bb']
我宁愿能够在我的函数中命名我的变量,但是 这个
>>> list(map(lambda k, v: k * v, d.items()))
TypeError: <lambda>() missing 1 required positional argument: 'v'
显然不会工作,因为 map 将单个输入提供给函数。
我为自己做的是写一个装饰器(这里是简化的);
def asterisk(func):
def _func(single_input):
return func(*single_input)
return _func
然后我就可以这样做了
>>> list(map(asterisk(lambda k, v: k * v), d.items()))
['a', 'bb']
但我不禁认为我在这里遗漏了一个简单的技巧或内置函数。
【问题讨论】:
-
list(itertools.starmap(operator.mul, d.items())) -
为什么不直接
list(k * v for k, v in d.items())? -
@Rfroes87 大概是因为这是一个微不足道的例子,并且将
map与给定的回调函数一起使用仍然有用……
标签: python