exercise on Codeacademy要求创建cube
函数return
变量cubed
的代码。
然后,当函数by_three
调用该函数时,作者建议使用另一个return
:
确保两个函数都返回它们的值而不是打印它们,并且
if/else
中by_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
中,然后再在if
中by_three
。前者不应该足够吗?
或者复制是否有助于代码执行,为什么?它有害吗?
答案 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
语句。