简介
Python 中的匿名函数被称为 lambda 函数。它们是一种创建没有名称的函数的方式。它们对于创建只使用一次的短函数很有用。
This tutorial is from open-source community. Access the source code
💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版
Python 中的匿名函数被称为 lambda 函数。它们是一种创建没有名称的函数的方式。它们对于创建只使用一次的短函数很有用。
列表可以进行 原地 排序。使用 sort
方法。
s = [10,1,7,3]
s.sort() ## s = [1,3,7,10]
你可以按逆序排序。
s = [10,1,7,3]
s.sort(reverse=True) ## s = [10,7,3,1]
这看起来足够简单。然而,我们如何对字典列表进行排序呢?
[{'name': 'AA', 'price': 32.2,'shares': 100},
{'name': 'IBM', 'price': 91.1,'shares': 50},
{'name': 'CAT', 'price': 83.44,'shares': 150},
{'name': 'MSFT', 'price': 51.23,'shares': 200},
{'name': 'GE', 'price': 40.37,'shares': 95},
{'name': 'MSFT', 'price': 65.1,'shares': 50},
{'name': 'IBM', 'price': 70.44,'shares': 100}]
依据什么标准呢?
你可以使用 键函数 来指导排序。键函数是一个接收字典并返回用于排序的感兴趣的值的函数。
portfolio = [
{'name': 'AA', 'price': 32.2,'shares': 100},
{'name': 'IBM', 'price': 91.1,'shares': 50},
{'name': 'CAT', 'price': 83.44,'shares': 150},
{'name': 'MSFT', 'price': 51.23,'shares': 200},
{'name': 'GE', 'price': 40.37,'shares': 95},
{'name': 'MSFT', 'price': 65.1,'shares': 50},
{'name': 'IBM', 'price': 70.44,'shares': 100}
]
def stock_name(s):
return s['name']
portfolio.sort(key=stock_name)
以下是结果。
## 检查字典如何按 `name` 键排序
[
{'name': 'AA', 'price': 32.2,'shares': 100},
{'name': 'CAT', 'price': 83.44,'shares': 150},
{'name': 'GE', 'price': 40.37,'shares': 95},
{'name': 'IBM', 'price': 91.1,'shares': 50},
{'name': 'IBM', 'price': 70.44,'shares': 100},
{'name': 'MSFT', 'price': 51.23,'shares': 200},
{'name': 'MSFT', 'price': 65.1,'shares': 50}
]
在上述示例中,键函数就是回调函数的一个例子。sort()
方法 “回调” 到你提供的一个函数。回调函数通常是仅用于该单一操作的简短单行函数。程序员经常寻求一种捷径来指定这种额外的处理。
使用 lambda 表达式来代替创建函数。在我们之前的排序示例中:
portfolio.sort(key=lambda s: s['name'])
这创建了一个 未命名 的函数,该函数计算 单个 表达式。上述代码比初始代码短得多。
def stock_name(s):
return s['name']
portfolio.sort(key=stock_name)
## 与 lambda 对比
portfolio.sort(key=lambda s: s['name'])
if
、while
等语句。sort()
等函数一起使用。读取一些股票投资组合数据并将其转换为列表:
>>> import report
>>> portfolio = list(report.read_portfolio('portfolio.csv'))
>>> for s in portfolio:
print(s)
Stock('AA', 100, 32.2)
Stock('IBM', 50, 91.1)
Stock('CAT', 150, 83.44)
Stock('MSFT', 200, 51.23)
Stock('GE', 95, 40.37)
Stock('MSFT', 50, 65.1)
Stock('IBM', 100, 70.44)
>>>
尝试以下语句,这些语句按股票名称对投资组合数据进行字母排序。
>>> def stock_name(s):
return s.name
>>> portfolio.sort(key=stock_name)
>>> for s in portfolio:
print(s)
... 检查结果...
>>>
在这部分中,stock_name()
函数从 portfolio
列表中的单个条目中提取股票名称。sort()
使用此函数的结果进行比较。
尝试使用 lambda
表达式按股票数量对投资组合进行排序:
>>> portfolio.sort(key=lambda s: s.shares)
>>> for s in portfolio:
print(s)
... 检查结果...
>>>
尝试按每只股票的价格对投资组合进行排序
>>> portfolio.sort(key=lambda s: s.price)
>>> for s in portfolio:
print(s)
... 检查结果...
>>>
注意:lambda
是一个有用的捷径,因为它允许你直接在对 sort()
的调用中定义一个特殊的处理函数,而不必先定义一个单独的函数。
恭喜你!你已经完成了匿名函数和Lambda实验。你可以在LabEx中练习更多实验来提升你的技能。