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表达式是怎么起作用的?
匿名函数,涉及到函数式编程,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 是 min/max 调用 key 回调函数是传入的参数,这个参数就是前面的 iterable 参数的每个值。dict 是 iterable 的并且每个值等于其 key。
#1 明明 py 的 lambda 很好用的。。。
谢谢大家指点,我想明白了,prices 作为一个字典,根据值进行排序后,MIN 或 MAX 方法返回的是字典的键而不是值
为何说它是半残?
他说的应该是 py 的 lamdba 表达式不支持跨行吧


