Python中的两个返回实例是否有问题?

时间:2013-06-18 11:58:31

标签: python function duplicates return return-value

背景:

exercise on Codeacademy要求创建cube函数return变量cubed的代码。

然后,当函数by_three调用该函数时,作者建议使用另一个return

  

确保两个函数都返回它们的值而不是打印它们,并且if/elseby_three语句的两个分支都包含return个语句。

接受为正确答案的代码是:

def cube(n):
    cubed = n**3
    return cubed

def by_three(n):
    if n % 3 == 0:
        return cube(n)
    else:
        return False

问题:

为什么需要两个return个实例?首先在cube中,然后再在ifby_three。前者不应该足够吗?

或者复制是否有助于代码执行,为什么?它有害吗?

2 个答案:

答案 0 :(得分:1)

如果某个函数没有返回任何内容,则默认返回None

您的cube函数不会打印结果,而是返回结果,以便在其他地方使用。如果只是print cubed而不是返回,那么return cube(n)将等同于return None,这不是您想要的。因为return 返回(或者在这种情况下,将其赋值)给变量。

by_three函数中,拥有else: return False非常有用,因为如上所述,否则它将返回None。这可能没有帮助,因为您可能需要值False以在代码中稍后确定其他内容。您被要求将return放入if / else的原因是因为这是Codecademy希望您这样做的:p。在Codecademy之后,它可能不会对你有用,但是当你开始编写自己的代码时,这是很好的做法:)。

mycubed = by_three(6)
# mycubed is now 216
mycubed2 = by_three(4)
# mycubed2 is now False.

当存在if/elif/else语句时,始终从函数返回值。但无论情况如何,总是能够随时返回一些东西。 (注意某些东西 no(ne)东西相反)

答案 1 :(得分:1)

  

为什么需要两个返回实例?

没有必要 - 只需一个return语句,您就可以通过多种方式表达该功能。

“只有最后的回归”模式......

def by_three(n):
    if n % 3 == 0:
        result = cube(n)
    else:
        result = False
    return result

...可以与“默认结果”模式结合...

def by_three(n):
    result = False
    if n % 3 == 0:
        result = cube(n)
    return result

......以及“在一条线上做所有事情”模式......

def by_three(n):
    return False if n % 3 else cube(n)

......这是相当可读的,但以下不是......

def by_three(n):
    return next(iter(map({True: lambda x: False, False: cube}[bool(n % 3)], (n,))))

......虽然它仍然通过Codecademy的测试。


<强>更新

  

......我的意思是我不理解第二个实例的必要性   return(当它已经在第一个时)

嗯,它们是两个独立的函数,因此如果需要返回一个值,每个函数都需要自己的return语句。