Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python,为什么在切换参数时返回不起作用?_Python_Python 3.x_Return - Fatal编程技术网

Python,为什么在切换参数时返回不起作用?

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)) 执行时: 输入值

我正在学习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))
执行时:

输入值: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条件中返回该值,因此需要在递归调用之前返回。想象一下,你爸爸送你去买东西,而你却送你的孪生兄弟去买。你的孪生兄弟将物品归还给你,但你的工作尚未完成。你还得把东西还给你爸爸,我明白了。科比,谢谢你的解释!