寻找更好的python语法将多个参数传递给单个参数化lambda
让我们以这段代码为例(按值对dict项进行排序): 键作为单参数函子的定义决定了这个丑陋的lambda 现在,在中,我看到了一些使用更好语法的示例,如:寻找更好的python语法将多个参数传递给单个参数化lambda,python,syntax,lambda,Python,Syntax,Lambda,让我们以这段代码为例(按值对dict项进行排序): 键作为单参数函子的定义决定了这个丑陋的lambda 现在,在中,我看到了一些使用更好语法的示例,如: sorted(d.items(), key=lambda (k,v): v) 但是,不幸的是,这给了我一个语法错误(在Python3.4下) 这种语法存在吗?哪个版本 这很不幸 :-( 其想法是,这会妨碍内省。与其弄清楚签名如何调用函数,还需要分析字节码(而不是语法树)。在Python3中删除了该功能 据我所知,lambda案例没有解决办法。
sorted(d.items(), key=lambda (k,v): v)
但是,不幸的是,这给了我一个语法错误(在Python3.4下)
这种语法存在吗?哪个版本 这很不幸
:-(
其想法是,这会妨碍内省。与其弄清楚签名如何调用函数,还需要分析字节码(而不是语法树)。在Python3中删除了该功能 据我所知,
lambda
案例没有解决办法。您可以执行以下操作:
def f_unpack(f):
def unpacking(args):
return f(*args)
return unpacking
然后使用
f\u unpack(lambda k,v:v)
(您必须为f\u unpack
找到一个更具描述性的简称,替换lambda是操作符的用例。itemgetter
:
sorted(d.items(), key=operator.itemgetter(1))
它在Python2.7.6中运行良好;我和你一样想知道为什么它在Python3中运行不正常你是对的,但我总是觉得它与以下内容背道而驰:“应该有一个,最好只有一个……”(引用自内存)。lambda是'itemgetter
的严格超集。对于特定情况,还有
itemgetter`(这可能更快)。嗯,operator.itemgetter
是一种明显的正确方法;)请记住,lambda
几乎从Python3中删除了,因为感觉有更好的解决方案(itemgetter
、attrgetter
和methodcaller
来自operator
模块;functools.partial
等)用于大多数用例。
sorted(d.items(), key=operator.itemgetter(1))