我想要一个函数,它传递一些参数(这些参数在函数的执行之间可能有所不同),但不是同时传递所有参数,然后在给定其余参数时执行该函数。
这个想法是,这是回调:
foo(argument)
但是 foo 是预先使用其他参数自定义的。
作为一个简单的示例,我们以重叠文本搜索与非重叠文本搜索为例。我有一个功能:
def textSearch(text,substring,overlapping):
...
... # Do stuff
return index
它需要一个文本正文、一个子字符串和一个 bool 值。它使用重叠或非重叠搜索来搜索文本正文中的子字符串。我希望能够创建一个具有减少回调的函数实例:
textSearch(text)
通过在回调之前参数化子字符串和重叠字段,而无需创建另一个函数定义。然后可以在文本的多个实例上调用该函数并使用这些参数进行操作。但是,该函数的单独实例应该能够同时存在具有不同的参数。
我得到了一个存储在名为mysearch的变量中的函数实例。该函数接受一个文本参数并返回较大文本中文本起始字符的索引。但是,我不关心它是重叠还是不重叠,也不关心正在搜索的文本是什么。我想直接打电话:
mysearch("Pancakes")
mysearch 已预先参数化为文本“Pancakes are好吃。”的非重叠搜索,因此结果将为 0(文本开头的索引)。
或者也许我得到了不同的配置,它以重叠的方式使用不同的文本进行搜索。我希望能够调用:
mysearch("Hash browns")
这个想法是保持接口(interface)相同,而不必担心定义函数如何工作的参数或重写函数定义。有没有办法实现这样的目标?
最佳答案
... a function which is passed some parameters (which can vary between executions of the function), but not all of them at once, then execute the function when given the rest of the parameters.
对于此用途functools.partial
。
尽管您只需为原始 textSearch
函数提供一些默认参数值就可以解决您的问题。
关于python - 根据参数在运行时自定义函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16535441/