2013-05-14 82 views
2

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

的想法是,这是回调:

foo(argument) 

但富定制事先使用其他参数。

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

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

这需要一个文本正文,一个子字符串和一个布尔值。它使用重叠搜索或非重叠搜索来搜索文本正文内的子字符串。我希望能够创造出具有降低回调函数的一个实例:

textSearch(text) 

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

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

mysearch("Pancakes") 

随着MYSEARCH已经预先参数设定为不重叠的搜索文本的,因此结果将是0(开始时的指数“煎饼好吃。”的文字)。

或者也许我给了一个不同的配置,它以不同的文本以重叠的方式进行搜索。我想能够调用:

mysearch("Hash browns") 

这样做是为了保持相同的接口,而不必担心它定义了功能的工作或重写函数定义的参数。有没有办法实现这样的事情?

回答

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") 
+0

如果答案对您有用,请[接受它](http://meta.stackexchange。com/a/5235/221039)。 – 2013-05-14 05:17:11

2

...这是传递一些参数(可 执行的功能有所不同),但不是所有的人一下子,然后给出其余参数时执行 功能的功能。

此用途functools.partial

虽然你可能能够解决你的问题,只是通过原始的textSearch函数得到一些默认参数值。

相关问题