匿名函数 lambda
lambda 函数是“只有一行”的函数,可以用来处理一些小型函数,就可以不用为了一小段程序码,额外新增一个有名称的函数,这篇教学将会介绍 Python 的匿名函数。
快速导览:匿名函数的特性、使用匿名函数、使用多个参数、搭配 for 循环、搭配 if 判断式、搭配 map 方法、搭配 filter 方法、搭配 sorted 方法
本篇使用的 Python 版本为 3.7.12,所有范例可使用 Google Colab 实作,不用安装任何软件 ( 参考:使用 Google Colab )
匿名函数的特性
lambda 匿名函数具有下列几种特性:
- 匿名函数不需要定义名称,一般函数需定义名称。
- 匿名函数只能有一行运算式,一般函数可以有多行运算式。
- 匿名函数执行完成后自动回传结果,一般函数加上 return 关键字才能回传结果。
使用匿名函数 lambda
lambda 函数的使用方法为“lambda 名稱: 內容”,下方的程序里,lambda 函数执行的结果等同于 hello 函数。
def hello(title):
print(title)
hello('oxxo') # oxxo
(lambda title: print(title))('oxxo') # oxxo
使用多个参数
lambda 函数可以支援参数,使用时“不需要用小括号”包住参数,如果有多个参数时,使用“逗号”分隔每个参数,此外,如果函数里会有回传值,在 lambda 函数里不需要撰写 return 语法,计算完毕就会将值回传。
下方的程序里,lambda 函数执行的结果等同于 hello 函数,会计算出 x+y 的数值。
def hello(x, y):
return x+y
a = hello(1,2)
b = (lambda x, y: x+y)(1,2)
print(a) # 3
print(b) # 3
lambda 函数可以给予一个变数作为名称 ( function name ),使用时就像是呼叫函数的用法,但仍然要注意 lambda 函数只能撰写“一行程序”,所以只适用于比较小型的程序。
下方的程序里,lambda 函数 b 执行的结果等同于 a 函数,会计算出 x+y 的数值。
def a(x, y):
return x+y
b = lambda x, y: x+y
print(a(1,2)) # 3
print(b(1,2)) # 3
搭配 for 循环
下方的程序将 lambda 函数 y 与 for 循环搭配 ( 参考 for 循环 ),效果等同于 x 函数。
def x(n):
a = list(range(n))
return a
y = lambda n: [i for i in range(n)] # 計算後回傳串列結果
print(x(5)) # [0, 1, 2, 3, 4]
print(y(5)) # [0, 1, 2, 3, 4]
搭配 if 判断式
下方的程序将 lambda 函数 y 与 if 判断式搭配 ( 参考 逻辑判断 ( if、elif、else ) ),效果等同于 x 函数。
def y(n):
if n<10:
return True
else:
return False
x = lambda n: True if n<10 else False # 判斷是否小於 10,回傳 True 或 False
print(x(5)) # True
print(y(5)) # True
搭配 map 方法
下方的程序将 lambda 函数 map 方法搭配,产生一个新的 b 串列,b 串列的项目是 a 串列项目的平方。( 参考:map )
a = [1,2,3,4,5,6,7,8,9]
b = map(lambda x: x*x, a)
print(list(b)) # [1, 4, 9, 16, 25, 36, 49, 64, 81]
搭配 filter 方法
下方的程序将 lambda 函数 filter 方法搭配,filter 方法会将 True 的项目留下,所以新串列的项目都会是大于 5 的数字。( 参考:filter )
a = [1,2,3,4,5,6,7,8,9]
b = filter(lambda x: x>5, a)
print(list(b)) # [6, 7, 8, 9]
搭配 sorted 方法
下方的程序将 lambda 函数 sorted 方法搭配,当 sorted 方法设定 key 参数时,会根据 key 进行排序,所以会根据数组中第二个项目的大小进行排序。( 参考:sorted )
a = [[1,2],[4,3],[5,1],[9,2],[3,7]]
b = sorted(a, key = lambda x: x[1])
print(list(b)) # [[5, 1], [1, 2], [9, 2], [4, 3], [3, 7]]
微信扫码关注
抖音扫码关注