5

[编辑] 更改return 0return. 成为 Python n00b 的副作用。:)

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

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

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

我想知道这是否比使用以下类型的代码更好(在性能、可读性或任何其他方面),因为上述方法对我来说看起来不错,因为它少了一个缩进:

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

5 回答 5

3

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

但是,既然您没有使用该值,为什么不使用return 0just呢?return

于 2012-06-25T17:24:46.553 回答
2

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

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

如果您设置为“在跳跃之前查看”,我可能会使用第一种形式来保持缩进。

于 2012-06-25T17:24:56.700 回答
2

首先,你可以return在没有任何东西的情况下使用,你不必强制使用return 0.

对于性能方式,这个问题似乎证明你不会注意到任何区别(除非你真的很不幸;))

于 2012-06-25T17:25:12.153 回答
1

我怀疑无论哪种情况,性能都会有很大不同。像你一样,我倾向于更倾向于第一种可读性方法。

除了较小的缩进(IMO 并不重要)之外,当您的输入 == 0 时,它排除了进一步阅读的必要性:在第二种方法中,人们可能会假设在 if/else 语句之后有额外的处理,而第一个明显表明该方法在该条件下是完整的。

不过,这实际上取决于个人喜好,您将在实践中看到这两种方法。

于 2012-06-25T17:24:29.930 回答
1

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

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

于 2012-06-25T17:24:59.937 回答