1

背景:

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?先 in cube,然后再iffor by_three。前者还不够吗?

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

4

2 回答 2

1

如果一个函数没有返回任何东西,它默认返回None

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

在您的by_three函数中,使用 , 很有用else: return False,因为如上所述,否则它将返回None. 这可能没有帮助,因为您可能需要该值False稍后在代码中确定其他内容。您被要求将returns 放入 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)thing是如何相反的)

于 2013-06-18T12:01:39.130 回答
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好吧,它们是两个独立的函数,因此如果需要返回值,每个函数都需要自己的语句。

于 2013-06-18T14:07:50.330 回答