Python,为什么在切换参数时返回不起作用?
我正在学习Python并使用3.3版本 我发现了一个我无法理解的“返回”问题 案例1。正常情况下,当“return”按预期返回值时Python,为什么在切换参数时返回不起作用?,python,python-3.x,return,Python,Python 3.x,Return,我正在学习Python并使用3.3版本 我发现了一个我无法理解的“返回”问题 案例1。正常情况下,当“return”按预期返回值时 def switch(a,b): print ("inputed values:", "a is",a, ", b is",b) if b==0: print (a) return a elif b>a: switch(b,a) print(switch(15,0)) 执行时: 输入值
def switch(a,b):
print ("inputed values:", "a is",a, ", b is",b)
if b==0:
print (a)
return a
elif b>a:
switch(b,a)
print(switch(15,0))
执行时:
输入值:a为15,b为0
十五
十五
案例2。问题是,当“return”返回“None”时,尽管“print”会打印值
def switch(a,b):
print ("inputed values:", "a is",a, ", b is",b)
if b==0:
print (a)
return a
elif b>a:
switch(b,a)
print(switch(0,15))
执行时:
输入值:a为0,b为15
输入值:a为15,b为0
十五
没有
这两种情况之间的区别在于,在执行第二个“elif”分支时,值被切换,并且再次使用切换的值调用函数。但在第二种情况下,返回值为“无”。
为什么在第二种情况下它不返回“a”值?在切换第二个if语句之前添加一个return语句
return switch(b,a)
switch方法返回a,但缺少return语句意味着未返回
switch
语句返回的值,因此返回默认的None
。如果b!=0
和a>=b
。谢谢你,科比!你的解决方案确实有效。我可以要求更多关于案例2中我的代码的解释吗?为什么它不工作?我认为我使用的是递归,并且值可以毫无问题地传递。使用“print”(“inputed values:”,“a is”,“a”,“b is”,“b)”),我可以看到它们确实被正确地传递了,并且执行了第一个if分支。那么为什么“return”没有得到正确的值呢?您使用的递归是正确的,但是您没有使用switch函数返回的值。switch函数从其第一个if语句返回一个值,您需要在第二个if条件中返回该值,因此需要在递归调用之前返回。想象一下,你爸爸送你去买东西,而你却送你的孪生兄弟去买。你的孪生兄弟将物品归还给你,但你的工作尚未完成。你还得把东西还给你爸爸,我明白了。科比,谢谢你的解释!