else vs返回在函数中使用以过早地停止处理

时间:2012-06-25 17:19:26

标签: python

[修改]将return 0更改为return。作为Python n00b的副作用。 :)

我正在定义一个函数,我正在进行大约20行处理。在处理之前,我需要检查是否满足某个条件。如果是这样,那么我应该绕过所有处理。我已经用这种方式定义了函数。

def test_funciton(self,inputs):
    if inputs == 0:
        <Display Message box>
        return
    <20 line logic here>

请注意,20行逻辑不返回任何值,并且我没有使用第一个'if'中返回的0。

我想知道这是否比使用以下类型的代码(在性能,可读性或任何其他方面)更好,因为上面的方法对我来说很好,因为它是一个缩进:< / p>

def test_function(self,inputs):
    if inputs == 0:
        <Display Message box>
    else:
        <20 line logic here>

5 个答案:

答案 0 :(得分:3)

通常,它会提高代码可读性,以尽早处理故障情况。然后你的代码的内容不必担心这些,你的代码的读者不必再考虑它们了。在许多情况下,你会提出异常,但如果你真的想做什么都不做,即使你一般都采用“单一退出点”的风格,我也不认为这是一个主要问题。

但为什么return 0而不只是return,因为您没有使用该值?

答案 1 :(得分:2)

在这种情况下,我认为知道为什么inputs不能为零很重要?通常,我认为大多数程序处理此问题的方法是在传递错误值时引发异常。然后可以在调用例程中处理(或不处理)异常。

你会经常看到它写着“更好地请求宽恕”,而不是“先看你跳跃”。当然,如果您经常将0传递给函数,那么try / except子句可能会变得昂贵(try便宜,except不是)。< / p>

如果您设置为“在跳跃之前”,我可能会使用第一个表单来缩小缩进。

答案 2 :(得分:2)

首先,您可以在没有任何内容的情况下使用return,您不必强迫return 0

对于演奏方式,this question似乎证明你不会发现任何差异(除非你真的不走运;)

答案 3 :(得分:1)

我怀疑在任何一种情况下性能都会有很大差异。和你一样,我倾向于更倾向于第一种可读性方法。

除了较小的缩进(IMO并不重要),它排除了在输入== 0时进一步阅读的必要性: 在第二种方法中,人们可能会认为在if / else语句之后还有其他处理,而第一种方法很明显该方法在该条件下完成。

但实际上,这只取决于个人偏好,你会看到这两种方法都在实践中使用。

答案 4 :(得分:1)

在这种情况下显示消息框后,您的第二个示例将return

我更喜欢“早退”,因为在我看来它会带来更好的可读性。但话说回来,如果不满足某些条件,那么在函数实际结束之前发生的大多数返回往往更多地围绕短路应用程序逻辑。