Python匿名函式lambda

lambda 函式是「只有一行」的函式,可以用来处理一些小型函式,就可以不用为了一小段程式码,额外新增一个有名称的函式,这篇教学将会介绍Python 的匿名函式。

匿名函式的特性

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 串列项目的平方。

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 的数字。

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 进行排序,所以会根据阵列中第二个项目的大小进行排序。

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]]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值