Python lambda参数传递用法

之前提到过在List的sort方法中有个key参数,需要用到lambda表达式,所以在这里对lambda表达式进行一些介绍,如果有函数式语言编程经验这个就很好理解了。

lambda表达式是一个匿名函数,其实lambda我们可以认为就是个很简单的函数,连个函数名都没有。在可以不使用lambda的时候我不建议使用。

它的句法(形式):
lambda arguments : expression

以下是一个简单的例子,我们可以认为创建了一个名为fun的函数,它有一个参数a,它返回a+10的结果。这是最简单也是最无用的例子,但方便我们理解。

# 15
fun = lambda a : a + 10
print(fun(5))

当然它同样支持多参数:

# 3
fun = lambda a, b : a + b
print(fun(1, 2))

它真正的用途是在另一个函数中作为参数传递:
自带函数的用法:filter, map, reduce  
fitre :根据条件筛选元素
map :所有元素进行相同操作
reduce :所有元素依次进行操作

import functools
#初始化一个0到9的列表
list_test = list(range(10))
#筛选对3取余等于0的数,结果[0, 3, 6, 9]
a = filter(lambda x: x % 3 == 0, list_test)
#所有元素加10结果[10, 11, 12, 13, 14, 15, 16, 17, 18, 19]
b = map(lambda x: x + 10, list_test)
#求和结果45
c = functools.reduce(lambda x, y: x + y, list_test)
print(list(a))
print(list(b))
print(c)
注意:

在python3中,filter和map方法不能在直接返回列表,它返回的是filter object和map object,需要用list()方法转换。
而reduce方法则直接从内置函数中删除,需要引用functools。

对于多条件排序的例子:

# 先根据第二个元素排序再根据第一个元素排序
# 返回结果[[4, 1], [1, 2], [2, 2], [3, 2], [1, 3], [3, 4]]
list_test = [[2, 2], [3, 4], [4, 1], [1, 3], [1, 2],[3, 2]]
list_test.sort(key = lambda x : (x[1],x[0]))
PS:如果这部分比较难以理解我们可以更换为以下方式进行多条件排序:
def second_first(ele):
    return (elem[1],elem[0])
list_test = [[2, 2], [3, 4], [4, 1], [1, 3], [1, 2],[3, 2]]
list_test.sort(key=second_first)

结果相同。

你可能感兴趣的:(Python)