Python:“return <tuple>”不断返回None </tuple>

时间:2012-02-25 11:07:52

标签: python function recursion return tuples

我有以下代码:

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

任何人都可以帮我纠正这个吗?

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:2)

我认为你的意思是if条款末尾的陈述:

return subStringMatchExact(...)

return语句下面的print语句确实有效 - 它成功地将链路上的答案发送到调用它的函数的实例 - 但随后是调用函数的副本扔掉它。如果return语句的第一个子句中没有if,则会返回None