【问题标题】:Are two instances of return in Python problematic?Python 中的两个 return 实例是否有问题?
【发布时间】:2013-06-14 15:11:12
【问题描述】:

背景:

exercise on Codeacademy 调用创建代码,其中cube 函数returns 变量cubed

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

确保两个函数都返回它们的值而不是打印它们,并且by_three 中的if/else 语句的两个分支都包含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。前者还不够吗?

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

【问题讨论】:

    标签: python function duplicates return return-value


    【解决方案1】:

    如果函数不返回任何内容,则默认返回None

    您的cube 函数不会打印结果,而是返回结果以便可以在其他地方使用。如果它只是print cubed 而不是return,那么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 语句时,总是从函数返回一个值。但无论情况如何,退货总是很方便。 (注意 somethingno(ne)thing 的对立面)

    【讨论】:

      【解决方案2】:

      为什么需要有两个return实例?

      不必如此 - 您可以通过单个 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 语句。

      【讨论】:

      • @Baumr 好吧,它们是两个独立的函数,所以如果需要返回值,每个函数都需要自己的 return 语句。您还期望如何做到这一点?
      猜你喜欢
      • 2015-08-03
      • 1970-01-01
      • 2012-10-23
      • 2017-09-07
      • 2013-06-14
      • 2021-09-08
      • 1970-01-01
      • 2012-03-10
      • 1970-01-01
      相关资源
      最近更新 更多