2012-02-25 71 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