我想要一个传递一些参数的函数(可以在函数的执行之间变化),但不能同时传递所有函数,然后在给出其余参数时执行函数。
这个想法就是回调:
foo(argument)
但foo是事先使用其他参数定制的。
举一个简单的例子,我们来看一下重叠与非重叠文本搜索的情况。我有一个功能:
def textSearch(text,substring,overlapping):
...
... # Do stuff
return index
它采用文本正文,子字符串和布尔值。它使用重叠或非重叠搜索来搜索文本正文中的子字符串。我希望能够创建一个具有减少回调的函数实例:
textSearch(text)
通过在回调之前参数化子字符串和重叠字段,而无需创建其他函数定义。然后可以在多个文本实例上调用该函数,并使用这些参数进行操作。但是,函数的单独实例应该能够同时存在不同的参数。
我获得了一个存储在名为 mysearch 的变量中的函数实例。该函数接受一个text参数,并返回较大文本中文本起始字符的索引。但是,我不在乎它是否重叠或不重叠,我也不关心被搜索的文本是什么。我想打电话给:
mysearch("Pancakes")
将 mysearch 预先参数化为非重叠搜索文本"煎饼很美味。",结果将为0(开头的索引)文本)。
或许我可以使用不同的配置,以重叠的方式搜索不同的文本。我希望能够致电:
mysearch("Hash browns")
这个想法是保持接口相同,而不必担心定义函数如何工作或重写函数定义的参数。有没有办法实现这样的目标?
答案 0 :(得分:2)
...传递一些参数的函数(可以在两者之间变化 执行函数,但不能同时执行所有函数,然后执行 给出其余参数时的函数。
对于此用途functools.partial
。
虽然您可以通过为原始textSearch
函数提供一些默认参数值来解决您的问题。
答案 1 :(得分: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")