2013-05-14 80 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函數得到一些默認參數值。

相關問題