2

我想要一个函数,它传递一些参数(在函数的执行之间可能会有所不同),但不是一次全部传递,然后在给定其余参数时执行函数。

这个想法是这是回调:

foo(argument)

但是 foo 是预先使用其他参数自定义的。

作为一个简单的例子,让我们来看看重叠与非重叠文本搜索的情况。我有一个功能:

def textSearch(text,substring,overlapping):
...
... # Do stuff
return index

它需要一个文本正文、一个子字符串和一个布尔值。它使用重叠或非重叠搜索在文本正文中搜索子字符串。我希望能够创建一个减少回调的函数实例:

textSearch(text)

通过在回调之前参数化子字符串重叠字段,而无需创建另一个函数定义。然后可以在多个文本实例上调用该函数并使用这些参数进行操作。但是,函数的单独实例应该能够同时存在不同的参数。

我得到了一个存储在名为mysearch的变量中的函数实例。该函数接受一个文本参数并返回较大文本中文本起始字符的索引。但是,我不在乎它是重叠的还是不重叠的,也不关心正在搜索的文本是什么。我想打电话给:

mysearch("Pancakes")

由于mysearch已预先参数化为文本“Pancakes are delicious.”的非重叠搜索,因此结果将为 0(文本开头的索引)。

或者,也许我得到了一个不同的配置,它以重叠的方式搜索,使用不同的文本。我希望能够致电:

mysearch("Hash browns")

这个想法是保持接口相同,而不必担心定义函数如何工作的参数或重写函数定义。有没有办法实现这样的目标?

4

2 回答 2

2

...一个函数,它传递了一些参数(在函数的执行之间可能会有所不同),但不是一次全部传递,然后在给定其余参数时执行该函数。

对于这个用途functools.partial

尽管您可以通过为原始textSearch函数提供一些默认参数值来解决您的问题。

于 2013-05-14T05:05:42.920 回答
1
def textSearch(substring,overlapping):
    def parametrisedTextSearch(text):
        # Do Stuff. Can refer to substring and overlapping here.
        return index
    return parametrisedTextSearch

mySearch = textSearch(substring = whatever, overlapping = whatever)

mySearch("Pancakes")
于 2013-05-14T05:05:44.900 回答