【问题标题】:python two ways to return from function differencespython从函数返回的两种方式差异
【发布时间】:2015-04-04 10:11:27
【问题描述】:

我想知道以下功能是否有任何相关差异:

def function1(n):
    if n%2 == 0:
        return n
    else:
        return "Number " +str(n)+ " is odd."

def function2(n):
    if n%2 == 0:
        return n
    else:
        print "Number " +str(n)+ " is odd."
        return

在一些在线课程中,我注意到在一项任务中(肯定比上面打印的代码更复杂,但我只是简单地展示了一个概念)自动评分向我返回了一个错误,即当我执行时函数没有正常退出使用了 function1 的设计,当我从 function2 更改为设计时,我得到了满分。我真的很感兴趣为什么我不能使用 function1 作为正确的设计,也许比我有更多经验的人会解释一下,并用简短的解释显示正确。

【问题讨论】:

    标签: python return


    【解决方案1】:

    如果执行 else,您的第二个函数将返回 None,而第一个函数将返回 "Number " +str(n)+ " is odd." 的值

    因此,如果需要使用 "Number " +str(n)+ " is odd." 中的值,如果您无法访问 else,您只会看到它被打印出来。

    In [9]: x = function1(11)
    
    In [10]: print x
    Number 11 is odd.
    
    In [11]: x = function2(11)
    Number 11 is odd.
    
    In [12]: print x
    None
    

    在您的课程中,评分者很可能没有使用 print 调用函数,因此要查看您必须到 print function1(11) 的输出,使用任何 ide (如 pycharm 等)都是一样的,只需调用刚有返回的函数不会显示返回值。

    没有看到更复杂的代码,有太多的可能性,但只是打印的一个特定部分是你的函数将返回None,这很可能需要在其他地方作为代码终止的值。

    【讨论】:

    • 我知道,但我不知道为什么它是课程中的首选解决方案。对我来说更自然的是第一个功能设计。
    • 第一个设计更好。如果分级机更喜欢第二个,那么它会发生一些奇怪的事情。
    • @Kevin,是的,第一个设计是我纠正它的唯一方法,但显然代码是分级的,必须打印输出。它不是我见过的唯一使用奇怪技术的在线评分器
    • 该函数的输出可能在其他地方使用,并且在该(未知)上下文中不返回字符串是可取的。在这种情况下,函数 2 是首选。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-14
    相关资源
    最近更新 更多