Python中Lambda表达式的使用


开门见山,匿名函数(不配拥有名字的函数么??)旨在用一行表达式将函数的作用表达清楚,匿名函数满足以下条件:

  • 不管怎么说lambda也是函数,也是python中的一等公民
  • 函数功能简单(表达简单),看内容就能知道函数的作用
  • 尽管结合多元运算符也可以实现复杂的功能(个人不建议)

题外话:lambda的使用在python中一直存在争议,匿名到底需要应用在什么样复杂程度的函数上?

匿名函数也是函数

lambda的定义格式:lambda 输入: 返回值(结果)

注意返回值无需使用return,返回是缺省的

一个简单的功能实现多功能的指数函数:

power = lambda a, b: a**b # 计算a的b次方
power(2, 3)
8

使用函数传参(可以优雅的表达)

假设有一个列表,我们需要过滤其中小于0的值。filter()函数是很好的选择:

# 创建样板数据
l = [-1, 2, 4, -3, 8, 9]
print(filter.__doc__)
filter(function or None, iterable) --> filter object

Return an iterator yielding those items of iterable for which function(item)
is true. If function is None, return the items that are true.

jupyter环境下可以使用shift+tab, 或filter?、filter??查看函数文档

接收一个function和一个可迭代对象完成满足function判定的删选,我们可以使用lambda来实现:

# 删选出大于0的内容
filtered = filter(lambda s: s>0, l)
# 将迭代器转换列表输出
list(filtered)
[2, 4, 8, 9]

像这样的情况使用lambda是很合适的,能够很清晰地表达自己的想法!

数据科学中常用

apply()函数为例,假设一个数据帧DataFrame有ABC三列,需要由AB列值生成D列

创建DataFrame:

import numpy as np
import pandas as pd
np.random.seed(0)
df = pd.DataFrame(np.random.randint(-10, 10, size=(10, 3)), columns=list('ABC'))
df
ABC
025-10
1-7-7-3
2-198
3-6-42
4-9-4-3
547-5
63-2-1
7969
8-555
9-108-7

如果AB都为负,那么D为1, 否则为0:

df['D'] = df.loc[:, 'A':'B'].apply(lambda s: 1 if s[0]<0 and s[1]<0 else 0, axis=1)
df
ABCD
025-100
1-7-7-31
2-1980
3-6-421
4-9-4-31
547-50
63-2-10
79690
8-5550
9-108-70

lambda同样支持三元运算符,这样的表达依据个人的基础使用。

支持lambda的表达都支持自定义函数(lambda也是函数!):

def calD(series):
    if series[0] < 0 and series[1] < 0:
        return 1
    else:
        return 0
np.random.seed(0)
df = pd.DataFrame(np.random.randint(-10, 10, size=(10, 3)), columns=list('ABC'))
df['D'] = df.loc[:, 'A':'B'].apply(calD, axis=1)
df
ABCD
025-100
1-7-7-31
2-1980
3-6-421
4-9-4-31
547-50
63-2-10
79690
8-5550
9-108-70
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值