【问题标题】:Python, why return does not work when parameters are switched? [closed]Python,为什么切换参数时返回不起作用? [关闭]
【发布时间】:2013-01-09 02:04:00
【问题描述】:

我正在学习 Python,使用的是 3.3 版本。

我发现了一个我无法理解的“返回”问题。

案例 1. OK 案例,当“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

15

15

案例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

15

两种情况的区别在于,在第二个“elif”分支被执行时,值被切换并且函数被再次调用并使用切换的值。但在第二种情况下,返回是“无”。 为什么在第二种情况下它不返回“a”值?

【问题讨论】:

    标签: python python-3.x return


    【解决方案1】:

    在第二个if语句的switch之前添加return语句

    return switch(b,a)
    

    switch方法返回a但缺少return语句意味着switch语句返回的值没有返回,因此返回默认的None

    【讨论】:

    • 如果b != 0a >= b 也应该有一个明确的返回。
    • 谢谢你,科比!您的解决方案确实有效。我可以要求对案例 2 中的代码进行更多解释,为什么它不起作用?我以为我正在使用递归,并且值可以毫无问题地传递。使用 'print ("inputed values:", "a is",a, ", b is",b)' 我可以看到它们确实传递正确,并且执行了第一个 if 分支。那么为什么“返回”没有得到正确的值呢?
    • 您使用的递归是正确的,但您没有使用 switch 函数返回的值。 switch 函数从其第一个 if 语句返回一个值,您需要在第二个 if 条件中返回该值,因此需要在递归调用之前返回。想想你爸爸派你去买东西,你派你的双胞胎兄弟去买。你的双胞胎兄弟将物品还给你,但你的工作还没有完成。您必须进一步将物品归还给您的父亲
    • 我明白了。 Cobie,谢谢你的解释!
    猜你喜欢
    • 1970-01-01
    • 2010-10-20
    • 1970-01-01
    • 2017-09-23
    • 1970-01-01
    • 2012-06-30
    • 1970-01-01
    • 1970-01-01
    • 2020-09-05
    相关资源
    最近更新 更多