【发布时间】:2014-05-26 21:05:48
【问题描述】:
考虑以下示例:
class Parser:
def __init__(self):
while True:
input = raw_input("Logic: ")
if input == 'quit':
break
self.readFunction(input)
def readFunction(self, input):
for i, char in enumerate(input):
if input[i] == '(' and input[i+1] != ')':
print input[i+1:-1]
return self.readFunction(input[i+1:-1])
控制台中的输入如下所示:
user@laptop:~/Projects/pr$ python main.py
Logic: a(b(c(d(e()))))
b(c(d(e())))
c(d(e()))
d(e())
e()
(逻辑是用户输入)
我的问题: 为什么必须使用return self.readFunction(input[i+1:-1]) 而不是self.readFunction(input[i+1:-1]) 来完成递归?如果我省略return 语句,程序的实际输出就会混淆。
【问题讨论】:
-
你到底有什么不明白的?您必须使用
return,因为您希望函数返回一个值。 -
在这段代码中,return 似乎被用来跳出“for”循环。 self.readFunction 行之后的“中断”也可以完成同样的事情。
-
但它不返回任何值。 return 语句会中断 for 循环还是什么?因为如果我不使用 return 语句,不同的循环就会交织在一起。
-
@mkimball 谢谢!你能解释一下没有退货声明会发生什么吗?函数调用后循环是否继续?
-
是的,循环从它停止的地方继续,并重复打印传递给嵌套的 readFunction 调用的切片。