寻找更好的 python 语法将多个参数传递给单参数化的 lambda
Looking for a nicer python syntax to pass multiple parameters to a single-parameterized lambda
让我们以这段代码为例(按值对字典项进行排序):
sorted(d.items(), key=lambda kv: kv[1])
将 key 定义为单参数仿函数决定了这个丑陋的 lambda。
现在,在 this book 中,我看到了一些使用更好语法的示例,例如:
sorted(d.items(), key=lambda (k,v): v)
但是,不幸的是,这给了我一个语法错误(在 python 3.4 下)。
有这样的语法吗?在哪个版本中?
不幸的是removed in Python3。
:-(
我们的想法是这会阻碍内省。与其弄清楚签名如何调用函数,不如分析字节码(不是语法树)。
该功能已在 Python3 PEP3113 中删除。
据我所知,lambda
案例没有解决方法。您可以执行以下操作:
def f_unpack(f):
def unpacking(args):
return f(*args)
return unpacking
然后使用f_unpack(lambda k, v: v)
。 (而且您必须为 f_unpack
.
找到一个更具描述性的简称
完全替换 lambda 是 operator.itemgetter
:
的用例
sorted(d.items(), key=operator.itemgetter(1))
让我们以这段代码为例(按值对字典项进行排序):
sorted(d.items(), key=lambda kv: kv[1])
将 key 定义为单参数仿函数决定了这个丑陋的 lambda。
现在,在 this book 中,我看到了一些使用更好语法的示例,例如:
sorted(d.items(), key=lambda (k,v): v)
但是,不幸的是,这给了我一个语法错误(在 python 3.4 下)。
有这样的语法吗?在哪个版本中?
不幸的是removed in Python3。
:-(
我们的想法是这会阻碍内省。与其弄清楚签名如何调用函数,不如分析字节码(不是语法树)。
该功能已在 Python3 PEP3113 中删除。
据我所知,lambda
案例没有解决方法。您可以执行以下操作:
def f_unpack(f):
def unpacking(args):
return f(*args)
return unpacking
然后使用f_unpack(lambda k, v: v)
。 (而且您必须为 f_unpack
.
完全替换 lambda 是 operator.itemgetter
:
sorted(d.items(), key=operator.itemgetter(1))