寻找更好的python语法将多个参数传递给单参数化的lambda

时间:2015-05-19 21:08:18

标签: python syntax lambda

我们以此代码为例(按值排序dict项目):

sorted(d.items(), key=lambda kv: kv[1])

key作为单参数仿函数的定义决定了这个丑陋的lambda。

现在,在this book中,我看到一些使用更好语法的示例,例如:

sorted(d.items(), key=lambda (k,v): v)

但是,不幸的是,这给了我一个语法错误(在python 3.4下)。

这种语法是否存在?在哪个版本?

3 个答案:

答案 0 :(得分:4)

遗憾的是removed in Python3

: - (

这个想法是这阻碍了内省。它不需要弄清楚签名如何调用函数,而是需要分析字节码(语法树)。

答案 1 :(得分:3)

完全替换lambda是operator.itemgetter的用例:

sorted(d.items(), key=operator.itemgetter(1))

答案 2 :(得分:2)

该功能已在Python3 PEP3113中删除。

据我所知,lambda案例没有解决方法。您可以执行以下操作:

def f_unpack(f):
   def unpacking(args):
       return f(*args)
   return unpacking

然后使用f_unpack(lambda k, v: v)。 (并且您必须为f_unpack找到更具描述性的简称。