2012-02-25 57 views
1

我有以下代碼:的Python:「返回<tuple>」不斷返回無

def subStringMatchExact(target,key,matches=(),base=0): 
    if find(target,key) != -1: 
     matches += (find(target,key)+base,) 
     base += find(target,key)+len(key) 
     subStringMatchExact(target[find(target,key)+len(key):],key,matches,base) 
    else: 
     print matches 
     return matches 

當我運行的功能,例如說subStringMatchExact('abcdabcdababcdedakcdobcdabcd','abc'),將print matches線將有我的翻譯打印(0,4,10,24),這是正確的。但是線路return matches返回值None

同樣,當我打電話給print subStringMatchExact('abcdabcdababcdedakcdobcdabcd','abc')時,口譯員也給出None

任何人都可以幫我解決這個問題嗎?

回答

3

我寧願認爲你打算在第5行返回遞歸值。就這樣,它只是調用它,然後繼續到方法的末尾,返回None。因此,您需要的僅僅是插入return關鍵字。

def subStringMatchExact(target,key,matches=(),base=0): 
    if find(target,key) != -1: 
     matches += (find(target,key)+base,) 
     base += find(target,key)+len(key) 
     return subStringMatchExact(target[find(target,key)+len(key):],key,matches,base) 
    else: 
     print matches 
     return matches 
+0

理解,像魅力一樣工作,謝謝! – hotdogning 2012-02-26 08:21:47

+0

@hotdogning:當你滿意時,請記得將答案標記爲「接受」。 – 2012-02-26 13:17:10

2

我想你的意思爲在if條款的最後聲明說:

return subStringMatchExact(...) 

print聲明下方的return聲明確實是工作 - 它成功發送答案備份鏈調用函數的實例 - 但隨後調用函數的副本將其扔掉。如果在if語句的第一個子句中沒有return,則返回None