模块课程(4/4)
Lambda 和高阶函数
lambda 是一个匿名函数,在一行上定义。句法:
lambda parametri: espressione相当于 def,但更简洁,非常适合“一次性”
传递给其他函数的函数。
quadrato = lambda x: x ** 2
quadrato(5) # 25
# equivalent to:
def quadrato(x):
return x ** 2与 def 的差异
| 方面 | def | lambda |
|---|---|---|
| 名称 | 必填 | 匿名 |
| 身体 | 多个声明 | 单个表达式 |
| 返回 | 明确 | 隐式(表达式) |
| 文档字符串 | 是的 | 没有 |
lambda 内没有 return:表达式的值就是结果。
何时使用 lambda
几乎总是:作为排序或选择函数的 key 参数。
parole = ["banana", "kiwi", "mela", "fragola"]
sorted(parole, key=len)
# ['kiwi', 'mela', 'banana', 'fragola']key=len 告诉 sorted:“要比较两个元素,请使用它们的长度”。对于
自定义标准,使用 lambda:
utenti = [
{"nome": "Ada", "eta": 36},
{"nome": "Linus", "eta": 54},
{"nome": "Grace", "eta": 85},
]
per_eta = sorted(utenti, key=lambda u: u["eta"])
# sorted by ascending age其他典型用途:min(...)、max(...)、filter(...)、map(...)。
nums = [-3, 1, -4, 1, -5, 9]
max(nums, key=lambda n: abs(n)) # -5 (maximum by absolute value)高阶函数
如果一个函数接受一个函数作为参数,那么它就是高阶
返回一。 sorted、max、filter、map 是高阶的。拉姆达
存在正是为了使高阶调用更容易。
何时避免使用 lambda 函数
Lambda 函数对于简短的一次性操作(例如快速排序)非常有用。但是,如果您发现自己将 lambda 分配给变量(例如 double = lambda x: x * 2),出于可读性和调试目的,通常首选使用标准 def 块(因为使用 def 定义的函数在错误回溯中保留其真实名称)。
尝试一下
给定列表 `words = ['banana', 'kiwi', 'mela', 'fragola']`,按升序长度将其排序为 `by_length`。评估“by_length”。
显示提示
key=len(或 lambda p: len(p))。
3 次尝试后可用的解决方案
复习练习
给定元组列表 `points = [(1, 5), (3, 2), (2, 4)]`,按第二个元素升序对它们进行排序,并分配给 `by_y`。评估“by_y”。
显示提示
拉姆达 p: p[1]
3 次尝试后可用的解决方案
额外的挑战
Define an anonymous `lambda` function that takes a number `x` and returns `True` if the number is even, and `False` otherwise. Assign the lambda to the variable `is_even` and test it with `is_even(8)` as the last line.
显示提示
编写 is_even = lambda x: x % 2 == 0,然后调用 is_even(8)。
3 次尝试后可用的解决方案