我来自OOP背景,想学习python。
我正在使用max
函数,该函数使用lambda表达式返回在列表players
中具有最大值totalScore
的类型Player
的实例。
def winner():
w = max(players, key=lambda p: p.totalScore)
函数正确返回类型为Player
且最大值为totalScore
的实例。
我对以下三件事感到困惑:
max
函数如何工作?它的论点是什么?我看了文件,但没能理解。key
的用途是什么?我知道它也用于sort
函数的上下文中这些都是些很低级的概念性问题,但能帮助我理解语言。如果你能举例说明的话,那会有帮助的。 谢谢
lambda
是一个匿名函数,它等价于:现在
max
变成:但是由于
def
语句是复合语句,因此不能在需要表达式的地方使用它们,这就是为什么有时使用lambda
语句的原因。注意
lambda
相当于您在def
的返回语句中放入的内容。因此,不能在lambda
中使用语句,只允许使用表达式。做什么
max
?所以,它只返回最大的对象。
如何工作?
在Python 2中,默认情况下
key
基于对象类型(例如字符串总是大于整数)比较基于set of rules的项。要在比较之前修改对象,或者基于特定的属性/索引进行比较,必须使用
key
参数。例1:
一个简单的例子,假设你有一个字符串形式的数字列表,但是你想用它们的整数值来比较它们。
这里
max
使用项目的原始值比较项目(字符串按字典顺序比较,以便获得'2'
作为输出):要按整数值比较项,请使用
key
和简单的lambda
:示例2:将
max
应用于元组列表。默认情况下,
max
将按第一个索引比较项。如果第一个索引相同,那么它将比较第二个索引。在我的示例中,所有项都有一个唯一的第一个索引,因此您将得到以下答案:但是,如果你想用索引1的值来比较每一项呢?简单:使用
lambda
:比较包含不同类型对象的iterable中的项:
包含混合项的列表:
In Python 2 it is possible to compare items of two different types:
But in Python 3 you can't do that any more:
但这是可行的,因为我们正在比较每个对象的整数版本:
它在iterable中查找“最大”的项。我想你 可以查一下那是什么,但如果不是,你可以查一下, i、 列表或字符串。
Key
是一个lambda函数,它将告诉max
iterable中哪些对象比其他对象大。假设您正在对自己创建的某个对象进行排序,而不是像整数这样明显的对象。这是一个更大的问题。简单地说,lambda是一个函数,您可以传递,并让其他代码片段使用它。以这个为例:
这需要两个对象,
a
和b
,以及一个函数f
。 它对每个对象调用f()
,然后将它们相加。看看这个电话:sum()
接受2
,并在其上调用lambda表达式。所以f(a)
变成2 * 2
,变成4。然后它对b
执行此操作,并将两者相加。简单地说,lambda来自lambda演算,这是一个返回函数的函数的概念;一个非常酷的数学概念,用于表示计算。你可以阅读here,然后真正理解它here。
最好再多读一点,因为lambdas可能会让人困惑,而且它们有多有用还不是很明显。检查here。
max
的强简化版本:关于lambda:
相关问题 更多 >
编程相关推荐