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

考虑下面的股票名和价格映射字典:
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 呢?
感谢!
Python中请问这个例子中的lambda表达式是怎么起作用的?


8 回复

匿名函数,涉及到函数式编程,Python 的 lambda 就是个半残废,不会 fp 没必要用

k 就是个变量,就像列表解析里的变量一样,暂时的。

写成你看得懂得就是这样
’’‘
prices = {…}
def function(k):
return prices[k]
’’’

min(), max(), sorted(), 都可以接收一个 key=func 参数,自己看文档去


# 示例代码:lambda表达式的作用
data = [('apple', 3), ('banana', 1), ('cherry', 2)]

# 使用lambda作为sort的key参数
sorted_data = sorted(data, key=lambda x: x[1])
print(sorted_data)  # 输出:[('banana', 1), ('cherry', 2), ('apple', 3)]

# 等同于普通函数定义
def get_second(item):
    return item[1]
    
sorted_data2 = sorted(data, key=get_second)
print(sorted_data2)  # 输出相同结果

lambda就是个匿名函数,lambda x: x[1]相当于定义了一个临时函数,参数是x,返回x[1]。在sorted()里它告诉程序按元组的第二个元素排序。

这玩意儿在需要简单函数又不想正经def的时候特别方便,比如map、filter里:

nums = [1, 2, 3, 4]
squared = list(map(lambda x: x**2, nums))  # [1, 4, 9, 16]

一句话:lambda就是临时小函数,用完就扔。

k 代表了 prices 里面的每一个元素,相当于:

for key in prices.keys():
print key

这里的 key,prices[k]就很好理解了,就是这个 key 对应的 value,相当于把所有的 value 遍历一遍,找出最小(最大)的值

为神马不看文档呢。k 是 min/max 调用 key 回调函数是传入的参数,这个参数就是前面的 iterable 参数的每个值。dict 是 iterable 的并且每个值等于其 key。

#1 明明 py 的 lambda 很好用的。。。

谢谢大家指点,我想明白了,prices 作为一个字典,根据值进行排序后,MIN 或 MAX 方法返回的是字典的键而不是值

为何说它是半残?

他说的应该是 py 的 lamdba 表达式不支持跨行吧

回到顶部