请问这个例子中的 lambda 表达式是怎么起作用的?

2017-07-25 21:29:17 +08:00
 saximi
考虑下面的股票名和价格映射字典:
prices = {
'ACME': 45.23,
'AAPL': 612.78,
'IBM': 205.55,
'HPQ': 37.20,
'FB': 10.75
}

可以在 min() 和 max() 函数中提供 key 函数参数来获取最小值或最大值对应的键的信息。比如:
min(prices, key=lambda k: prices[k]) # Returns 'FB'
max(prices, key=lambda k: prices[k]) # Returns 'AAPL'

请问上面例子中的 lambda 是如何起作用的?比如 min 函数中,往 lambda 传入一个 k 变量?这个 k 是怎么来的呢?以及为何 prices[k]可以作为 key 呢?
感谢!
2332 次点击
所在节点    Python
7 条回复
flaneurse
2017-07-25 21:40:45 +08:00
匿名函数,涉及到函数式编程,Python 的 lambda 就是个半残废,不会 fp 没必要用
---
k 就是个变量,就像列表解析里的变量一样,暂时的。
---
写成你看得懂得就是这样
'''
prices = {...}
def function(k):
return prices[k]
'''
---
min(), max(), sorted(), 都可以接收一个 key=func 参数,自己看文档去
misaka19000
2017-07-25 21:46:38 +08:00
k 代表了 prices 里面的每一个元素,相当于:

for key in prices.keys():
print key

这里的 key,prices[k]就很好理解了,就是这个 key 对应的 value,相当于把所有的 value 遍历一遍,找出最小(最大)的值
weyou
2017-07-25 21:46:51 +08:00
为神马不看文档呢。k 是 min/max 调用 key 回调函数是传入的参数,这个参数就是前面的 iterable 参数的每个值。dict 是 iterable 的并且每个值等于其 key。
misaka19000
2017-07-25 21:47:20 +08:00
@flaneurse #1 明明 py 的 lambda 很好用的。。。
saximi
2017-07-25 22:36:55 +08:00
谢谢大家指点,我想明白了,prices 作为一个字典,根据值进行排序后,MIN 或 MAX 方法返回的是字典的键而不是值
klesh
2017-07-25 22:59:39 +08:00
@flaneurse 为何说它是半残?
wwqgtxx
2017-07-26 04:09:12 +08:00
@klesh 他说的应该是 py 的 lamdba 表达式不支持跨行吧

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/377926

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX