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

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

猜你喜欢

转载自blog.csdn.net/hfut_wowo/article/details/72864154