You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何改写传给filter的lambda函数,使其支持传入正则表达式参数?

解决方案

你需要把filterf改成高阶函数——也就是能接收正则参数,并返回一个符合filter要求的判断函数的函数。有两种常见写法:

写法一:嵌套Lambda

直接用嵌套lambda实现,代码简洁:

import re

filterf = lambda pattern: lambda s: re.match(pattern, s)
print("".join(list(filter(filterf(r'^T'), ["T x", "M y"])))) # outputs: T x

写法二:带正则编译的函数(推荐)

如果需要多次使用这个判断逻辑,提前编译正则能提升性能,用普通函数定义更清晰:

import re

def filterf(pattern):
    # 提前编译正则,避免重复编译
    regex = re.compile(pattern)
    return lambda s: regex.match(s)

print("".join(list(filter(filterf(r'^T'), ["T x", "M y"])))) # outputs: T x

原理说明

原来的filterf是直接接收字符串s并判断的函数,现在改成:

  1. 先接收正则表达式pattern作为参数
  2. 返回一个新的函数,这个新函数才是filter实际调用的判断函数,它会用传入的正则去匹配输入的字符串s

这样调用filterf(r'^T')时,就会生成一个和原代码中lambda s:re.match(r'^T', s)功能完全一致的函数,刚好满足filter的参数要求。

内容的提问来源于stack exchange,提问作者Chris JJ

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 15:22:33