5

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

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

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

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

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


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

4

7 回答 7

5

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

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

然而,在这个简单的例子中,似乎几乎没有必要重用或测试该功能,甚至根本不需要该功能。

于 2012-06-20T20:13:29.267 回答
2

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

计算值和显示值是两个不同的东西,它们不应该混在一起。

于 2012-06-20T20:30:16.223 回答
1

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

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

没有真正的开销。

于 2012-06-20T20:23:00.200 回答
1

要记住的一件事是,如果您打印它,您的函数将不会返回任何内容,因此如果您打算使用您希望编写的行,您应该返回它。

于 2012-06-20T20:17:21.410 回答
0

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

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

在您进行原型设计时,让函数立即打印计算值是很好的,或者如果函数非常简单......但迟早,如果程序变得更大更有价值,您将需要转换那个简单的“打印出来吧!” 函数转换为更纯粹的计算和返回函数。

因此,我尝试从返回结果、稍后打印的编码风格开始。它看起来更干净,通常可以节省我以后的时间。但与所有风格上的东西一样,这是一个判断电话,还有 YMMV。

于 2012-06-20T20:35:01.357 回答
0

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

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

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

最后考虑一下,这两种方法在某种程度上是等效的,但是对于阅读您的代码的任何人(甚至是您自己),从可读性的角度来看,它的布局方式有助于捕获代码的意图。

希望这可以帮助

于 2012-06-20T20:24:33.170 回答
0

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

于 2012-06-20T20:15:26.500 回答