Python 函数应该打印字符串还是返回字符串?

Python 函数应该打印字符串还是返回字符串?,python,styles,conventions,Python,Styles,Conventions,我正在编写一个Python脚本,它需要打印一行到控制台。很简单,但我记不起(或决定)接受的做法是否要在函数中打印,例如: def exclaim(a): print (a + '!') 或者让它返回一个字符串,如: def exclaim(a): return (a + '!') 然后在主脚本中打印。我可以为任何一种方法进行论证。是否有一种普遍接受的方法来实现这一点,还是取决于您的偏好 编辑:澄清一下,这不是我正在使用的函数。我不喜欢在这里发布代码,所以我将这些函数编写为一

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

def exclaim(a):
    print (a + '!')
或者让它返回一个字符串,如:

def exclaim(a):
    return (a + '!')
然后在主脚本中打印。我可以为任何一种方法进行论证。是否有一种普遍接受的方法来实现这一点,还是取决于您的偏好



编辑:澄清一下,这不是我正在使用的函数。我不喜欢在这里发布代码,所以我将这些函数编写为一个过于简单的示例。

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

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


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

我认为函数应该返回值。

需要记住的一点是,如果打印它,函数将不返回任何值,因此,如果您打算使用希望编写的行,您应该将其返回。

如果您确定该函数不能重复使用,并且您创建该函数只是为了增强代码的可读性,您可以在函数中打印它

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


没有真正的开销。

我一直在混合这两种方式,但我认为它可以归结为这样:

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

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

最后,这两种方法在某种程度上是等效的,但是对于任何阅读代码的人(即使是稍后的你自己),它的布局方式有助于从可读性的角度捕获代码的意图


希望这有帮助

我最欣赏Python的一点是它鼓励适当地分离关注点。将一项任务分解为其原子组成部分时,几乎没有摩擦


计算值和显示值是两件不同的事情,它们不应该混合在一起。

如果一个函数计算值,然后立即打印它们,我经常发现我最终会希望在不同的地方或以不同的方式显示或使用值

我将决定将结果写入一个文件,将其作为网页的一部分发送,将其用作其他函数的部分值,以不同的方式显示排序或过滤结果,等等

在进行原型设计时,或者如果函数非常简单,让函数立即打印计算值是可以的……但是,如果一个程序发展成更大、更有价值的程序,迟早会需要将这个简单的“只需打印它!”函数转换成一个更纯粹的计算和返回函数


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

我认为你不应该返回一个字符串,只是为了在不同的函数中打印它。我很确定这只是你的喜好,尽管从函数内部打印(在那个例子中)对我来说似乎更有意义。然而,我可以看到这样的情况,它可能会从另一个方面更有意义——例如,如果你有时想使用这个函数,但并不总是想让它打印一些东西。我不被允许分享代码,所以我决定写一些让我的概念得到理解的东西。谢谢你的帮助!这正是我所倾向的,但把我的剧本变成一个“印刷品”的列表也有点不合适。谢谢你的建议!