奇怪的函数返回值?

时间:2012-06-19 09:07:14

标签: python python-3.x return-value

我正在尝试删除字符串中花括号之间的所有内容,并尝试以递归方式执行此操作。 当递归结束时,我在这里返回x,但函数doit在某处返回None。虽然在def中打印x会打印出正确的字符串。 我做错了什么?

strs = "i am a string but i've some {text in brackets} braces, and here are some more {i am the second one} braces"
def doit(x,ind=0):
   if x.find('{',ind)!=-1 and x.find('}',ind)!=-1:
     start=x.find('{',ind)
     end=x.find('}',ind)
     y=x[start:end+1]
     x=x[:start]+x[end+1:]
     #print(x)
     doit(x,end+1)
   else:
       return x

print(doit(strs))

输出:
None

3 个答案:

答案 0 :(得分:3)

如果if块成功,您永远不会返回任何内容。 return语句位于else块中,只有在其他所有块都没有的情况下才会执行。您希望返回从递归中获得的值。

if x.find('{', ind) != -1 and x.find('}', ind) != -1:
    ...
    return doit(x, end+1)
else:
    return x

答案 1 :(得分:1)

...
#print(x)
doit(x,end+1)
...

应该是

...
#print(x)
return doit(x,end+1)
...

您缺少if块中的return语句。如果函数以递归方式调用,则不会返回该调用的返回值。

答案 2 :(得分:1)

请注意,使用正则表达式更容易:

import re
strs = "i am a string but i've some {text in brackets} braces, and here are some more {i am the second one} braces"
strs = re.sub(r'{.*?}', '', strs)