【问题标题】:Why return is giving me the statement and None [duplicate]为什么 return 给了我声明和 None [重复]
【发布时间】:2020-04-25 07:01:44
【问题描述】:

当我运行以下代码时:

def heart_value(name1,name2,name3):
    if name1 == "Rachel":
        return print("So you are Rachel!")
    elif name2 == "Rachel":
        print("Ah, so the second person is Rachel.")
        return print('Right?')
    elif name1 != 'Rachel':
        return print('So Rachel is not the first person.')
    else:
        return print('ok')

print(heart_value("Rachel","Rachel","Mike"))

它给我如下:

So you are Rachel!
None

为什么还要打印None

【问题讨论】:

  • 因为您正在打印另一个 print 函数的输出。您可以通过只返回字符串而不是 print 函数来避免这种情况。
  • print 将某些内容作为side effect. 打印到屏幕上print(<anything>) 的返回值始终为None,因为打印函数不会像sum 函数那样返回值例如
  • 我不知道是谁投了这个问题,但只是我的两分钱,它不值得投反对票(因此我的抵消投票)。一般来说,我认为如果您对新用户投反对票,您可能应该解释原因。对于新用户来说,不加说明就被否决并不是特别有用。

标签: python


【解决方案1】:

print() 函数执行一个操作(打印到控制台),但不返回任何内容。

所以当您使用语句return(print("ok")) 时,return 函数会调用 print("ok") 函数,该函数会在控制台中打印文本“ok”,但不会向return() 函数返回任何内容,这意味着 None 的值被传递回最初调用 heart_value() 的函数。

您需要做的是return() 字符串对象本身(“ok”)。这样,当您 print() 函数 heart_value() 时,print() 语句将评估该函数,获取一个字符串对象并打印它。

【讨论】:

    【解决方案2】:

    print 函数不返回值。您只需返回字符串return '<string>',而不是return print('<string>')

    它打印“无”的原因是因为您在函数返回的值(即None)上调用print(),因此该值出现在控制台中。

    if name1 == "Rachel":
        return "So you are Rachel!"
    elif name2 == "Rachel":
        return "Ah, so the second person is Rachel. \n Right?"
    elif name1 != 'Rachel':
        return 'So Rachel is not the first person.'
    else:
        return 'ok'
    
    print(heart_value("Rachel","Rachel","Mike"))
    

    【讨论】:

    • 嗯,它返回 None,正如 OP 演示的那样,但这不是所需的返回值。
    • @chepner OP 询问为什么它返回 None,而不是如何修复它以返回所需的值
    • 他们试图打印返回值的事实表明他们希望它返回打印的消息。
    • 非常感谢!问题解决了!
    猜你喜欢
    • 2018-08-15
    • 2020-05-20
    • 1970-01-01
    • 1970-01-01
    • 2014-06-26
    • 2023-02-20
    • 2020-08-10
    • 2021-08-06
    相关资源
    最近更新 更多