如何在Python中使用函数创建函数?

时间:2017-07-14 21:21:23

标签: python pandas

我想创建一个名为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距离。

提前谢谢!

1 个答案:

答案 0 :(得分: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)