【问题标题】:How do I create a function with a function in Python?如何在 Python 中使用函数创建函数?
【发布时间】:2023-03-25 06:08:02
【问题描述】:

我想创建一个名为 jaccard 的函数,它可以像这样工作

def jaccard(doc1, doc2):
    inter = len(np.intersect1d(doc1, doc2))
    union = len(np.union1d(doc1, doc2))
    jaccard = float(inter)/union
    return jaccard

除了我只希望它采用一个参数并将另一个参数硬编码到函数中。

我想写一个函数来生成这个带有硬编码参数的函数,因为我需要将它与数千个参数一起使用。

def jaccard(doc2):
    inter = len(np.intersect1d(['Work with us --- The Missing Slate Magazine'], doc2))
    union = len(np.union1d(['Work with us --- The Missing Slate Magazine'], doc2))
    jaccard = float(inter)/union
    return jaccard

所以我想生成一个这样的函数。

我想要这个的原因是因为我想将它应用于 Pandas DataFrame 的列。数据框包含一个字符串列表。我想用函数中的硬编码参数找到它们每个的jaccard距离。

提前谢谢你!

【问题讨论】:

  • 我不明白。你不是只回答你自己的问题吗?将字符串放入函数中,您就可以开始了。我错过了什么?
  • 我想创建一个返回该函数的函数。我将通过编辑进行澄清。
  • 呃,你的数据框中列的内容是什么?
  • 只使用装饰器?还是包装函数?

标签: python pandas


【解决方案1】:

您可以在 python 中创建闭包。比如

def jacard(doc1):
    def _jacard(doc2):
        inter = len(np.intersect1d(doc1, doc2))
        union = len(np.union1d(doc1, doc2))
        return float(inter)/union
    return _jacard

然后:

prepared_func = jacard(doc1)

之后:

results = map(prepared_func, some_array_of_doc2s)

在这种情况下,使用 functools 的部分参数绑定是创建带有参数 doc2 绑定的闭包的简写。

prepared_func = functools.partial(jaccard, doc1) 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-08-16
    • 2016-05-06
    • 2012-07-01
    • 2015-12-07
    • 1970-01-01
    • 1970-01-01
    • 2022-12-20
    相关资源
    最近更新 更多