Open qiwihui opened 3 years ago
Lambda函数是一个小的(一行)匿名函数,没有函数名称。 Lambda函数可以接受任意数量的参数,但只能具有一个表达式。 虽然使用def关键字定义了普通函数,但在Python中,使用lambda关键字定义了匿名函数。
lambda arguments: expression
当简单函数仅在代码中使用一次或短时间时,可以使用Lambda函数。 最常见的用途是作为高阶函数(将其他函数作为参数的函数)的参数。 它们还与诸如 map(), filter() , reduce()之类的内置函数一起使用。
map()
filter()
reduce()
# 一个给参数加10的lambda函数 f = lambda x: x+10 val1 = f(5) val2 = f(100) print(val1, val2) # 一个返回两个参数乘积的lambda函数 f = lambda x,y: x*y val3 = f(2,10) val4 = f(7,5) print(val3, val4)
15 110 20 35
从另一个函数返回定制的lambda函数,并根据需要创建不同的函数变体。
def myfunc(n): return lambda x: x * n doubler = myfunc(2) print(doubler(6)) tripler = myfunc(3) print(tripler(6))
12 18
key函数会在排序之前转换每个元素。
points2D = [(1, 9), (4, 1), (5, -3), (10, 2)] sorted_by_y = sorted(points2D, key= lambda x: x[1]) print(sorted_by_y) mylist = [- 1, -4, -2, -3, 1, 2, 3, 4] sorted_by_abs = sorted(mylist, key= lambda x: abs(x)) print(sorted_by_abs)
[(5, -3), (4, 1), (10, 2), (1, 9)] [-1, 1, -2, 2, -3, 3, -4, 4]
map(func, seq) ,使用函数转换每个元素。
map(func, seq)
a = [1, 2, 3, 4, 5, 6] b = list(map(lambda x: x * 2 , a)) # 但是,尝试使用列表推导 # 如果你已经定义了函数,请使用 map c = [x*2 for x in a] print(b) print(c)
[2, 4, 6, 8, 10, 12] [2, 4, 6, 8, 10, 12]
filter(func, seq) ,返回其 func 计算为 True 的所有元素。
filter(func, seq)
func
True
a = [1, 2, 3, 4, 5, 6, 7, 8] b = list(filter(lambda x: (x%2 == 0) , a)) # 同样可以使用列表推导实现 c = [x for x in a if x%2 == 0] print(b) print(c)
[2, 4, 6, 8] [2, 4, 6, 8]
reduce(func, seq) ,重复将 func 应用于元素并返回单个值。func 需要2个参数。
reduce(func, seq)
from functools import reduce a = [1, 2, 3, 4] product_a = reduce(lambda x, y: x*y, a) print(product_a) sum_a = reduce(lambda x, y: x+y, a) print(sum_a)
24 10
GitHub repo: qiwihui/blog Follow me: @qiwihui Site: QIWIHUI
GitHub repo: qiwihui/blog
Follow me: @qiwihui
Site: QIWIHUI
Lambda函数是一个小的(一行)匿名函数,没有函数名称。 Lambda函数可以接受任意数量的参数,但只能具有一个表达式。 虽然使用def关键字定义了普通函数,但在Python中,使用lambda关键字定义了匿名函数。
当简单函数仅在代码中使用一次或短时间时,可以使用Lambda函数。 最常见的用途是作为高阶函数(将其他函数作为参数的函数)的参数。 它们还与诸如
map()
,filter()
,reduce()
之类的内置函数一起使用。使用示例:另一个函数内的Lambda函数
从另一个函数返回定制的lambda函数,并根据需要创建不同的函数变体。
使用lambda函数作为key参数的自定义排序
key函数会在排序之前转换每个元素。
在 map 函数中使用 Lambda 函数
map(func, seq)
,使用函数转换每个元素。在 filter 函数中使用 Lambda 函数
filter(func, seq)
,返回其func
计算为True
的所有元素。reduce
reduce(func, seq)
,重复将func
应用于元素并返回单个值。func
需要2个参数。