欢迎关注WX公众号:【程序员管小亮】
前言
在python 中,我们不仅仅定义普通的函数——就是使用def关键字定义的函数;同时还可以定义匿名函数。那么什么是匿名函数呢?
1、定义:
匿名函数顾名思义就是指:是指一类无需定义标识符(函数名)的函数或子程序,也就是没有名字的函数。
python 使用 lambda 来创建匿名函数。在Python中,lambda 作为一个关键字,作为引入表达式的语法。想比较def函数,lambda 是单一的表达式,而不是语句块。lambda 这个名称来自于LISP,而LISP则是从lambda calculus(一种符号逻辑形式)取这个名称的。
2、语法格式:lambda 参数:表达式
lambda 语句中,开头先写关键字lambda,冒号前是参数,可以有多个,用逗号隔开;冒号右边的为表达式,需要注意的是只能有一个表达式。由于lambda返回的是函数对象(构建的是一个函数对象),所以需要定义一个变量去接收。
lambda [arg1 ,arg2,.....argn]:expression
# lambda 参数列表:return [表达式] 变量
# 由于lambda返回的是函数对象(构建的是一个函数对象),所以需要定义一个变量去接收
从我的另一个博客中使用的例子来做一个简单地说明:
add = lambda x, y : x+y
add(1,2) # 结果为3
等价于函数
def a(x, y):
return x + y
print(a(1, 2))
关键字lambda表示匿名函数,冒号前面的x,y
表示函数参数。
3、注意点:
lambda 函数可以接收任意多个参数 (包括可选参数) 并且返回单个表达式的值。但是lambda 函数不能包含命令,包含的表达式不能超过一个,不用写return,因为返回值就是该表达式的结果。
4、匿名函数优点:
1)使用Python 写一些脚本时,使用lambda 可以省去定义函数的过程,让代码更加精简。
2)对于一些抽象的,不会被别的地方再重复使用的函数,有时候函数起个名字也是个难题,使用lambda 不需要考虑命名的问题。
>>> f = lambda x: x * x
>>> f
<function <lambda> at 0x10453d7d0>
>>> f(5)
25
3)使用lambda在某些时候然后代码更容易理解。
5、应用:
在内置函数max()求最大值,min()求最小值, map()映射, reduce()合并, filter()过滤中会用到!
# map()映射
def f(x):
return x * x
print(list(map(f,[1,2,3,4,5,6,7])))
>>> [1, 4, 9, 16, 25, 36, 49]
# reduce()合并
from functools import reduce
def add(x,y):
return x + y
print(reduce(add, range(1, 101)))
>>> 5050
# filter()过滤
def is_odd(n):
return n % 2 == 1
newlist = list(filter(is_odd, [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]))
print(newlist)
>>> [1, 3, 5, 7, 9]
python课程推荐。
参考文章:
-
https://www.liaoxuefeng.com/wiki/897692888725344/923030156998560