Python: «return <tuple>» продолжает возвращаться None - PullRequest
1 голос
/ 25 февраля 2012

У меня есть следующий код:

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 ]

3 голосов
/ 25 февраля 2012

Я скорее думаю, что вы намеревались вернуть рекурсивное значение в строке 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
2 голосов
/ 25 февраля 2012

Я думаю, что вы хотите сказать, что оператор в конце предложения if говорит:

return subStringMatchExact(...)

Оператор return под вашим оператором print действительно работает - он успешно отправляетответ возвращает цепочку к экземпляру вызывающей ее функции, но затем копия вызывающей функции выбрасывает ее.Без return в первом предложении оператора if вместо него возвращается None.

...