我来自OOP背景,尝试学习Python。我使用的是max函数,该函数使用lambda表达式返回Player类型的实例,其中players列表中的totalScore最大。
def winner():
w = max(players, key=lambda p: p.totalScore)
函数正确返回具有最大totalScore的Player类型的实例。我对以下三件事感到困惑:
max功能如何工作?它的论点是什么?我看了文件,但不明白。
关键字key在max函数中的用途是什么?我知道它也用于sort函数的上下文中。
lambda表达式的含义?如何阅读?它们是如何工作的?
这些都是非常不寻常的概念性问题,但会帮助我理解语言。如果你能举出一些例子来解释,那会有帮助的。谢谢
哪个python版本?
你查阅过文件吗?
@charmlesscoin python 2.7.5版
@Inbarrose我检查了max函数的文档。不太明白。
@Inbarrose这个页面现在实际上是谷歌在python max lambda上的头号搜索结果,可能实际上对新用户更有帮助。
lambda是一个匿名函数,相当于:
def func(p):
return p.totalScore
现在,max变为:
max(players, key=func)
但是,由于def语句是复合语句,因此不能在需要表达式的地方使用它们,这就是为什么有时使用lambda语句的原因。
注意,lambda相当于你在def的返回声明中所做的。因此,不能在lambda中使用语句,只允许使用表达式。
max是做什么的?
max(a, b, c, ...[, key=func]) -> value
With a single iterable argument, return its largest item. With two or
more arguments, return the largest argument.
所以,它只返回最大的对象。
key是如何工作的?
默认情况下,在python2中,key根据一组基于对象类型的规则比较项(例如,字符串总是大于整数)。
要在比较之前修改对象,或者根据特定的属性/索引进行比较,必须使用key参数。
例1:
一个简单的例子,假设您有一个字符串形式的数字列表,但是您希望通过它们的整数值来比较这些项目。
>>> lis = ['1', '100', '111', '2']
这里,max使用其原始值比较项目(按字典方式比较字符串