Python中filter筛选函数匿名参数问题

最近在学习python,觉得有个地方很有意思,稍作记录,方便以后查阅。

Python内建的filter()函数用于过滤序列。

简单来讲,就是针对一个序列中的每个元素,调用一个判别函数,根据函数返回的True和False(Python中的bool类型必须严格为True和False),决定是否删除这个元素。

有意思的地方正在于这个判别函数的入参。如果仅根据待筛选值即可确定是否过滤,那么直接指定函数名即可,待筛选值会作为入参传入该函数;如果筛选逻辑需要额外的参数,则使用lambda表达式返回匿名函数,作为判别函数使用。

先以一个形参为例,即_filter(x):
1、如果调用时未传入实参,则x为序列中带判别值,例如:

def is_odd(n):
    return n % 2 == 1

list(filter(is_odd, [1, 2, 4, 5, 6, 9, 10, 15]))

运行后输出为:[1, 5, 9, 15]

2、如果筛选逻辑需要额外的参数,则使用lambda表达式返回匿名函数,例如:

def is_odd(n):
    return lambda x: x % n == 1

n = 2
list(filter(is_odd(n), [1, 2, 4, 5, 6, 9, 10, 15]))

函数名也是一种变量,挺强大!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值