函数应该打印一个字符串还是返回它?

时间:2012-06-20 20:11:56

标签: python styles conventions

我正在编写一个Python脚本,它需要在控制台上打印一行。很简单,但我不记得(或决定)接受的做法是否在函数中打印,例如:

def exclaim(a):
    print (a + '!')

或让它返回一个字符串,如:

def exclaim(a):
    return (a + '!')

然后在主脚本中打印。我可以为任何一种方法争论。是否有一种普遍接受的方式来做到这一点还是取决于偏好?


编辑:澄清一下,这不是我正在使用的功能。我觉得在这里发布代码感觉不舒服,所以我把这些函数写成了一个过于简单的例子。

7 个答案:

答案 0 :(得分:5)

通常,函数应生成并返回其输出,并让调用者决定如何处理它。

如果直接在函数中打印结果,则很难重用该函数来执行其他操作,并且很难测试,因为您必须拦截stdout而不是仅测试返回值。

然而,在这个简单的例子中,似乎没有必要重用或测试函数,甚至根本没有函数。

答案 1 :(得分:2)

我最欣赏Python的一点是它鼓励正确分离关注点。将任务分解为原子组件的摩擦很小。

计算一个值并显示一个值是两回事,它们不应混合在一起。

答案 2 :(得分:1)

要记住的一件事是,如果你打印它,你的功能将不会返回任何内容,所以如果你打算使用你希望写的行你应该返回它。

答案 3 :(得分:1)

如果您确定无法重复使用该功能,并且您只是为了增强代码可读性而构建该功能,则可以在该功能中进行打印。

否则,如果您以后可以以任何方式重新使用它,则应该返回该值。第二种方法是首选方法,因为函数的一个目的是重复使用。

没有真正的开销。

答案 4 :(得分:0)

在我看来,函数应该返回值。

答案 5 :(得分:0)

我一直混合两种方式,但我认为它可以像这样简化:

  • 如果将整个功能的唯一目的输出到终端(向用户打印消息),则应打印该功能。 (可选)您可以使用某些返回值作为错误状态或布尔值,但作为辅助步骤。通常打印的字符串/消息在程序流中不会有其他用途,因为用户收到了消息,并且已经消耗的字符串变量可以被垃圾收集。

  • 如果函数实际上是PERFORMS,那么返回一个实数值(即使这个值是一个字符串),并且你想在终端上检查该值,而不是调用该函数并打印其结果在另一个声明中。在调试的情况下,您只需删除或注释该print语句,但该函数将继续以静默方式执行。仅作比较,如果print语句在函数内部,则需要修改函数本身。

作为最后一个考虑因素,这两种方法在某种程度上是等价的,但是对于任何阅读代码的人来说(即使是自己一段时间后),从可读性的角度来看,它的布局方式有助于捕获代码的INTENT。

希望这有帮助

答案 6 :(得分:0)

如果函数计算值然后立即打印它,我经常发现我最终想要在不同的地方或以不同的方式显示或使用这些值。

我决定将结果写入文件,将其作为网页的一部分发送出去,将它们用作其他功能的部分值,以不同的方式显示它们的排序或过滤等。

当您进行原型设计时,或者函数非常简单时,函数可以立即打印计算值...但是,如果程序变得更大,更有价值,您需要转换那简单的“只打印它!”功能转换为更纯粹的计算和返回功能。

所以我试着从一个返回结果,打印它们以后的编码风格开始。它看起来更干净,通常可以节省我的时间。但是就像所有风格一样,它是一种判断力,而YMMV。