Python小技巧:lambda表达式

lambda expression

lambda表达式本质上是一行函数,它们在其他语言中被称为匿名函数。

如果不想在程序中对一个函数使用两次,则可以使用lambda表达式,它们和普通函数完全一样

1
2
3
4
5
6
7
8
9
10
11
12
# lamada expression 学习

def f(x):
return x*x

def g(x,y):
return x+y

# 上面两个函数用lamada表达式重新编写:
# 冒号之前表示输入的所有值,冒号后面时输出
f = lambda x: x*x
g = lambda x,y: x+y

实例1:根据数据集的某一列排序

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
countries = []
f = open('countries.csv','r')
for line in f:
line = line.strip()
line = line.split(',')
name = line[1]
capt = line[3]
popu = int(line[4])
countries.append((name,capt,popu))

# 对countries的数据集进行排序
# 可以调用python自带的sort()方法,该方法是根据数据集的第一列进行排序
# countries.sort()

# ----------------------------------------------
# 使用lambda表达式代替函数
# ----------------------------------------------

# 在python自带的sort()方法中,可以定义key参数,参数值为返回被排序列的值函数,
# 所以我们想根据数据的最后一列排序,则需要定义一个函数,返回每行的最后一个值,
# 该方法的参数为每行的值contry,方法返回contry的最后一列
# def get_population(country):
# return country[2]
# 然后在sort()中定义key为该方法,即可实现根据最后一列来进行排序
# countries.sort(key=get_population)


# 这个地方get_population方法其实就相当于输入一个值contry,返回另外一个值contry[2]
# 此处我们就可以使用lambda表达式进行代替,而且可以省去对函数的定义
# lambda country:country[2]来代替get_population函数
countries.sort(key=lambda country:country[2])

for country in countries:
print(country)

实例2:在复合函数中使用lambda表达式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# ----------------------------------------------
# 使用lambda表达式用在复合函数中
# ----------------------------------------------

# 现在想要实现f(x) = a*x^2+b*x+c这样一个函数,其中a,b,c,x都是需要用户去输入的,
# 但是a,b,c和x在本质上并不相同,前者为参数,后者为变量,所以我们在定义函数的时候,
# 可以将其写成下面的这种形式:
# 相当于返回的是一个函数,这个函数需要一个x参数,输出的结果即为f(x)最后的运算结果

# lambada用在复合函数中
def quadratic(a,b,c):
return lambda x:a * x * x + b * x + c

# f = quadratic(1,2,3)
# print(f(5))

print(quadratic(1,2,3)(5))

lambda表达式可以让代码更加简洁。虽然我们在coding的过程中会将某个功能提取为函数,进而让单个函数更加简洁,但是某些函数只需要使用一次,这样就会导致代码很臃肿,使用lambda表达式可以用一行代码来表示这样一个函数表示,代码更加易读。