如何从函数生成函数

Posted

技术标签:

【中文标题】如何从函数生成函数【英文标题】:how to generate function from a function 【发布时间】:2021-11-22 14:28:00 【问题描述】:

您好,我正在使用以下形式编写很多函数:

def is_match_a(doc):
    pattern = # spaCy patterns
    matcher = Matcher(nlp.vocab)
    matcher.add("match_a", [pattern])
    matches = matcher(doc)
    if matches:
        return True

我想编写一个函数,根据给定的模式和名称生成这些函数。我在想这样的事情:

def generate_matcher(pattern, name):
    func = some code
    return func

所以最终,我可以做以下事情

is_match_a = generate_matcher(pattern_a, name_a)
is_match_b = generate_matcher(pattern_b, name_b)
if is_match_a(doc):
    # do something
elif is_match_b(doc):
    # do something else

我是 python 新手,我不知道该怎么做。这是你使用装饰器的地方吗?

【问题讨论】:

is_match_a() 你可以只用return matches 而不是检查它是否为真 【参考方案1】:

定义一个使用主函数的patternname 参数的嵌套函数。

def generate_matcher(pattern, name):
    def is_match(doc):
        matcher = Matcher(nlp.vocab)
        matcher.add(name, [pattern])
        matches = matcher(doc)
        if matches:
            return True

    return is_match

【讨论】:

谢谢!这是一个值得使用装饰器的问题吗? 并非如此。当您想在其他函数周围添加代码时使用装饰器,而不仅仅是为其提供参数。

以上是关于如何从函数生成函数的主要内容,如果未能解决你的问题,请参考以下文章

如何运行从 postgresql 中的函数生成的查询

如何从 tkinter 条目为另一个函数生成位置参数

如何在 Node.js 流回调中聚合从异步函数生成的 Promise?

如何使用 PL SQL 函数从 xmltype 数据生成 xml 报告

为啥从独立函数生成的 pyplot 窗口与从事件处理程序调用的函数生成时的行为不同?

如何根据概率密度函数生成随机数