【问题标题】:Why does the return statement not return any text, whilst print does?为什么 return 语句不返回任何文本,而 print 呢?
【发布时间】:2019-07-28 12:54:45
【问题描述】:

当我跑步时

profitable_gamble(0.2, 50, 9)

这个函数没有输出

def profitable_gamble(prob, prize, pay):
    if prob * prize > pay:
        return "true"
    else:
        return "false"

但是,当我将函数更改为使用 print()

def profitable_gamble(prob, prize, pay):
    if prob * prize > pay:
        print("true")
    else:
        print("false")

我得到了预期的“真实”。如何在使用 return 而不是 print 时发生这种情况?

【问题讨论】:

  • 因为您从不指示打印输出。您可以使用print(profitable_gamble(...)) 打印旧函数的输出。

标签: python function return


【解决方案1】:

这是你认为你的代码应该做的:

def profitable_gamble(prob, prize, pay):
    if prob * prize > pay:
        return "true"
    else:
        return "false"


returned_value = profitable_gamble(0.2, 50, 9)
print(returned_value)

但是你从来没有告诉它打印任何东西,所以它没有。如果你只这样称呼:

profitable_gamble(0.2, 50, 9)

然后你的函数仍然返回“true”或“false”......你只是永远不会对它做任何事情,所以它只会死在调用堆栈中。

编辑:您可能还会因为使用命令行(或类似 Ipython 笔记本)而感到困惑。在那些交互式 shell 中,如果你这样做:

profitable_gamble(0.2, 50, 9)
>> "true"

那么它确实在屏幕上显示了价值。但是,这只是因为您使用的是 shell,它(可能)为您将调用结果输出到控制台。所以本质上,那个 shell(无论是终端还是一些交互式笔记本)为你做了额外的 print() 语句......

请注意 - 一般而言,没有理由做类似的事情

return "true"

在 python 中。通常,您只想使用布尔值:

return True

(注意大写的 T)。

尤其是因为您无论如何都可以执行 print(some_boolean_variable) 或 str(some_boolean_variable)...。额外的好处是测试布尔值比每次都比较字符串“true”要容易得多...

【讨论】:

  • 谢谢(特别是编辑部分)我一直在使用一个有挑战的网站,即使我可以在 pycharm 上进行打印并且很困惑。
  • 无论如何都没有理由将return Truereturn Falseif 一起使用。整个方法可以简单地是return prob * prize > pay
  • @EricDuminil 完全同意。但我认为操作人员在我的 Python 方面没有那么多经验,所以认为没有必要在太多事情上添加太多细节......