Python 中的 lambda 表达式及其简单应用

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/potato012345/article/details/79478261

1. lambda 表达式基本用法

在Python中,lambda表达式用来创建匿名函数,使用后得到一个函数对象( function object )。其基本使用形式是:

lambda x : op(x)

即,lambda标识符后跟出由冒号分割开的函数体,冒号左侧是函数的变量,冒号右侧是函数的具体功能。lambda表达式返回对应变量的函数值。如:

>>> func = lambda x, y : x + y

定义了一个两变量之和的函数。而使用该函数只需要根据冒号左侧的参数要求传入参数即可:

>>> func(1,2)
>>> 3

lambda表达式可以用在 Python 语言中任意需要用到函数的地方。

可以看到 lambda 表达式可以快速定义一些简单函数。相比于 def 定义,lambda更轻便。一般地,用 lambda 表达式定义一些功能简答,且不会重复使用的函数;用 def 定义功能复杂且重用性强的函数。

2. lambda 表达式常见搭配使用

由于 lambda 定义形式简洁,常常和一些需要使用函数对象的功能函数搭配使用。如 reduce / filter / map / sorted。这些函数具有大致相同的调用格式:

reduce(function, iterable)

filter(function, iterable)

map(function, iterable)

sorted(iterable, cmp[key])

下面将详细介绍这些函数的基本使用以及在函数中使用 lambda 表达式。

  • reduce(function, iterable)

reduce函数在Python 3中已经被移出了全局函数,可以从functools模块中导入。

reduce 会对数据集合(iterable)中的元素累积用function进行处理。注意function的参数必须为2个。

>>> from functools import reduce

>>> def mul(x, y):
        return x*y

>>> reduce(mul, [1, 2, 3, 4])    # 1*2*3*4
>>> 24

如果使用lambda表达式,则可以省略对mul函数的定义,直接写作:

>>> reduce(lambda x,y : x*y , [1,2,3,4])
>>>24
  • filter(function, iterable)

filter 函数对数据集合中的元素逐个进行判断:将元素作为参数传入function。若function返回值为True,则保留该元素;反之,则不保留。

>>> def is_odd(x):
        return x % 2 == 1
>>> res = filter(is_odd, [1,2,3,4,5])    # 保留列表中的奇数元素
>>> print(list(res))    # 在Python 3中filter函数默认返回的是一个iterator对象,需要转化才能打印。
>>> [1,3,5]

# 使用 lambda 表达式
>>> filter(lambda x : x%2==1 , [1,2,3,4,5])
>>> print(list(res))
>>> [1,3,5]
  • map(function, iterable)

map函数会为数据集合中的元素逐个调用function,并将函数返回值按顺序组合成新的数据集合。根据function的参数个数,数据集合可以有多个

# 函数参数只有1个
>>> def square(x):
        return x**2
>>> res = map(square, [1,2,3,4])
>>> print(list(res))
>>> [1,4,9,16]
# 使用lambda表达式
>>> res = map(lambda x:x**2, [1,2,3,4])
>>> print(list(res))
>>> [1,4,9,16]

# 函数参数有多个
>>> res = map(lambda x,y : x+y, [1,2,3,4], [5,6,7,8])
>>> print(list(res))
>>> [6,8,10,12]
  • sorted(iterable, key, reverse)

sorted 函数是一个排序函数,能够根据key指定的关键字对复杂的数据元素进行排序,如对一个以元组为元素的列表进行排序。sorted默认返回升序排列,reverse=True时返回降序排列。

# 简单的列表排序
>>> l = [1,7,5,6,2]
>>> L = sorted(l)
>>> print(L)
>>> [1,2,5,6,7]

#复杂情形,指定排序依据
>>> insts = [('Judy', 15),('Bob', 17),('Cate',16)]
>>> Insts = sorted(insts, key = lambda x:x[1])    # 按每个元素的第2个子元素排序
>>> print(Insts)
>>> [('Judy', 15),('Cate',16),('Bob', 17)]

3. 总结

本文中介绍了Python 中lambda表达式定义匿名函数的方法,以及reduce / filter / map / sorted 四个函数的基本用法,可以看到,如果能够熟练合理地将lambda表达式和这些函数结合应用,可以大大提高编程效率和代码整洁度。

猜你喜欢

转载自blog.csdn.net/potato012345/article/details/79478261