您示例中的 lambda 函数确定哪个项目首先出现。
在“经典”情况下,它会简单地计算x-y
:如果结果是negative
,则意味着x is smaller
y 和因此来before y
。
此外,您可以将反向参数传递给排序方法,这将reverse=True
是顺序。
在这种情况下,您的“排序”功能是“lambda-wrapper”中的 cmp 功能。其中,您将 x 的顺序与 y 交换并使用第三个参数,这意味着它以相反的顺序排序(x/y-swap)并通过比较所有第三个参数(x[2]
)来实现。
关于你的第二个子弹:
...谁能解释 lambda 函数的作用”
如果您问什么是 lambda 函数:它是一个匿名的轻量级内联函数。匿名意味着它没有标识符。(但您可以指定一个。例如:sqr = lambda x : x**2
您现在可以像使用任何其他功能一样使用它y = sqr(2)
:)
Normal function: def name(arg): vs lambda-function: lambda arg: ret_value
^ ^ ^ ^ ^ ^ ^
a) b) c) a) b) c) d)
- a) 将以下内容标记为普通/lambda 函数的关键字
- b) 函数名称在 lambda 函数“丢失”的情况下因此是匿名的
- c) 函数参数:普通函数 -> 括号,lambda 函数 -> 没有
- d) 返回值——在普通函数被省略的情况下,因为必须显式地用 return 返回。(没有显式返回它提供无) lambda 隐式返回冒号右侧的评估结果。
您使用排序函数的示例是 lambda 函数的典型用例。它们被用作“丢弃”函数,您可以内联而不创建自己的正常函数。
一个更“pythonic”的变体是这样的:
from operator import itemgetter
keyfunc = itemgetter(2) # takes the 3rd argument from an itterable
sorted_list = sorted(lol, key=keyfunc, reverse=True)