【问题标题】:What causes my function to return None at the end? [duplicate]是什么导致我的函数最后返回 None? [复制]
【发布时间】:2023-01-22 17:31:37
【问题描述】:

我非常简单的 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(这是函数未明确返回任何内容时返回的默认值)。

    由于您的方法内部有一个 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

        如果你只是回来值,然后在它不会输出 None 的函数上调用 print

        希望这可以帮助 :)

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2023-01-01
          • 2022-11-21
          • 1970-01-01
          • 1970-01-01
          • 2019-03-03
          • 1970-01-01
          • 2017-12-10
          • 2018-11-29
          相关资源
          最近更新 更多