根据参数在运行时自定义函数

时间:2013-05-14 04:59:42

标签: python function

我想要一个传递一些参数的函数(可以在函数的执行之间变化),但不能同时传递所有函数,然后在给出其余参数时执行函数。

这个想法就是回调:

foo(argument)

但foo是事先使用其他参数定制的。

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

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

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

textSearch(text)

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

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

mysearch("Pancakes")

mysearch 预先参数化为非重叠搜索文本"煎饼很美味。",结果将为0(开头的索引)文本)。

或许我可以使用不同的配置,以重叠的方式搜索不同的文本。我希望能够致电:

mysearch("Hash browns")

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

2 个答案:

答案 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")