使用if语句的Python递归函数调用
我有一个关于使用if语句和递归的函数调用的问题。 我有点困惑,因为python似乎跳入了if语句块,即使我的函数返回“False” 以下是一个例子:使用if语句的Python递归函数调用,python,function,if-statement,recursion,Python,Function,If Statement,Recursion,我有一个关于使用if语句和递归的函数调用的问题。 我有点困惑,因为python似乎跳入了if语句块,即使我的函数返回“False” 以下是一个例子: 1 def function_1(#param): 2 if function_2(#param): 3 #do something 4 if x<y: 5 function_1(#different parameters) 6 if x
1 def function_1(#param):
2 if function_2(#param):
3 #do something
4 if x<y:
5 function_1(#different parameters)
6 if x>y:
7 function_1(#different parameters)
在两个函数“isFieldFree”和“isFieldEscape”返回False后,python将继续第5行中的代码,有时会在第6行中执行。简短回答: 这是因为您实际上并没有调用该函数。可以使用括号调用该函数
if function2():
...
长答案:
Python中的函数是一级公民(函数范式),因此仅凭函数名引用函数是完全有效的。以下是有效语法:
def hello():
print("Hello")
hello_sayer = hello
hello_sayer() # print "Hello"
下一个概念是非布尔变量的真值性。
在Python中,以下内容被视为False-y
- 没有
- 假的
- 任何数字类型的零,例如0、0L、0.0、0j李>
- 任何空序列,例如,,(),[]李>
- 任何空映射,例如,{}。用户定义类的实例,如果该类定义
- 非零()或len()方法,当该方法返回 整数零或布尔值为False
编辑:前面的问题不完整,没有函数调用。对于新问题,AChampion的答案是正确的。您可能会误解递归的工作原理,是的,它在第5行或第6行继续,因为递归在调用堆栈中的较低级别结束,所以它在调用堆栈中的较高级别继续。这是一个示例调用堆栈,请注意
False
之后的下一个操作是较高调用堆栈上的下一个findExit()
:
1 findExit(...):
2 True:
3 field assignment
4.1 findExit(x+1)
2 True
3 field assignment
4.1 findExit(x+1):
2 False # Does not jump to line 5 in current call stack.
5.1 findExit(x-1):
. ...
如果函数2:
你确定这就是你的意思吗?函数_2是函数吗?如果没有更具体的例子,就没什么帮助了。如果function_2()
返回False
,则递归结束。@AChampion感谢您的回复,添加了一个具体示例。这是一个使用递归函数调用解决迷宫的示例。更新后的文档链接使用Python 3。Python2.4太旧了,无法参考。注意:OP更新了问题,但这并没有解决他的实际问题。
1 findExit(...):
2 True:
3 field assignment
4.1 findExit(x+1)
2 True
3 field assignment
4.1 findExit(x+1):
2 False # Does not jump to line 5 in current call stack.
5.1 findExit(x-1):
. ...