6

我只想知道在python中哪种方式更可取。想象两个功能:

1个功能:

def foo(key):
    if bar.has_key(key):
        return bar.get(key)
    # do something with bar
    # this will be executed if bar_key(key) is False
    ...
    return something

2 功能:

def foo(key):
    if bar.has_key(key):
        return bar.get(key)
    else:
        # do something with bar
        # this will be executed if bar_key(key) is False
        ...
        return something

如您所见,唯一的区别是else声明。所以问题是它会以某种方式影响性能。或者有什么理由包含else在这种类型的功能中?

4

3 回答 3

7

如果在这两种方法之间进行选择,我会选择第一种。 return非常明确的是,执行在该点终止。出于这个原因,我找到if x { return y } else { ... }了一种反模式(不仅仅是在 Python 中——我在 C/C++ 代码中看到了这一点,它也让我很恼火)。

如果您要返回,else则完全不需要一个块,并且会导致可能非常大的代码块的毫无意义的缩进。您拥有的嵌套结构越多,在阅读代码时就越难以在头脑中保持正确的上下文。出于这个原因,当它不混淆逻辑时,我倾向于减少嵌套,在这种情况下,我认为不会。

于 2013-08-29T17:15:45.457 回答
4

蟒蛇方式:

def foo(key):
    return bar.get(key, something)
于 2013-08-29T17:12:47.743 回答
4

虽然这个问题有点基于意见,但我想说第二个问题更像Pythonic,因为“显式优于隐式”。第二个功能清楚地表明“如果这种情况,请执行此操作。否则,请执行此操作”。另一方面,第一个函数意味着“否则”部分。

于 2013-08-29T17:13:51.627 回答