【问题标题】:What causes my function to return None at the end?Python函数返回无
【发布时间】:2014-02-23 15:56:15
【问题描述】:

我非常简单的 python 函数在它的末尾返回“None”,我不太清楚为什么。我看过其他一些帖子,但仍然无法弄清楚。 任何帮助表示赞赏。

这是我的代码:

def printmult(n):
    i = 1
    while i <= 10:
        print (n * i, end = ' ')
        i += 1

print(printmult(30))

【问题讨论】:

  • 因为你不返回任何东西。
  • 让我猜猜,你是一名 Ruby 程序员,并且习惯于返回方法中的最后一条语句(不使用 return 关键字);)
  • 正如 BrenBarn 所说,您没有返回任何值,因此该函数返回 None,要解决您的代码问题,您需要将最后一行替换为 printmult(30)

标签: python function


【解决方案1】:

因为在 Python 中,每个函数都会返回一个值,而 None 是在您没有明确指定其他内容时返回的值。

期望print(printmult(30)) 究竟做了什么?您已经要求它评估printmult(30),然后评估print 的任何结果。 某事必须由此产生,对吧?还是您可能期望引发某种异常?

请确保您了解打印和返回不是一回事

【讨论】:

    【解决方案2】:

    您没有在函数printmult 中返回任何内容,因此当您打印printmult(30)结果 时,它将是None(这是函数不返回时返回的默认值) t 明确返回任何东西)。

    由于您的方法内部有 print 语句并且它不应该返回某些内容(通常当方法名称类似于 printSomething() 时,它不会返回任何内容),您应该将其称为:

    printmult(30)
    

    不是

    print(printmult(30))
    

    【讨论】:

      【解决方案3】:

      其他答案很好地指出了错误所在,即您需要了解打印和返回是不一样的。如果你想让你的函数返回一个值,然后你可以打印或存储在一个变量中,你需要这样的东西:

      def returnmult(n):
          i = 1
          result_string = ''
          while i <= 10:
              result_string += str(n * i) + ' '
              i += 1
          return result_string
      
      print(returnmult(30))
      

      【讨论】:

        【解决方案4】:
        def printmult(n):
            i = 1
            while i <= 10:
                print (n * i, end = ' ')
                i += 1
        
        printmult(30)
        

        问题是您正在打印一个什么也不返回的函数的返回值,这将打印None

        【讨论】:

        • 在 REPL 完成时,这仍然会打印 None。最好向某人展示如何实际上返回一个值,以便他们原来的print() 可以工作。
        【解决方案5】:

        我也是 Ruby 出身,一开始觉得很奇怪。

        如果您 print 包含 print 语句的内容,则它返回的最后一个内容是 None

        如果您只是返回这些值,然后在函数上调用print,它将不会输出None

        希望这会有所帮助:)

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2013-03-25
          • 2013-09-27
          • 1970-01-01
          • 2020-08-24
          • 2021-05-10
          • 2019-02-12
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多