这两个功能中哪一个更“pythonic”?

时间:2013-08-29 17:10:19

标签: python

我只是想知道在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

3 个答案:

答案 0 :(得分:7)

如果选择在这两种方法之间,我会选择第一种方法。 return非常明确地表示执行在此时终止。由于这个原因,我发现if x { return y } else { ... }是一种反模式(不仅仅是在Python中 - 我在C / C ++代码中看到这一点,它也让我感到烦恼)。

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

答案 1 :(得分:4)

pythonic方式:

def foo(key):
    return bar.get(key, something)

答案 2 :(得分:4)

虽然这个问题有点基于意见,但我会说第二个更多是 Pythonic ,原因是“显性比隐含更好”。第二个功能显然是“如果出现这种情况,请执行此操作。否则,请执行此操作”。另一方面,第一个函数暗示“其他”部分。