7

很简单的问题:

特别是在 Python 中(因为 Python 实际上在PEP 8中指定了“强烈推荐”的样式指南,但这实际上适用于任何语言),具有if始终返回的子句的函数是否应该在子句中具有替代代码else?换句话说,func_style_one()func_style_two()下面的一段代码中(显然)是完全等价的:

def func_style_one():
    if some_conditional_function():
        do_something()
        return something()
    else:
        do_something_else()
        return something_else()

def func_style_two():
    if some_conditional_function():
        do_something()
        return something()
    do_something_else()
    return something_else()

显然,最好和最易读的风格取决于具体情况,对于哪个更好,意见会有很大差异,但我问的是核心 Python 社区特别喜欢哪种风格。(例如,在标准库中哪个更常用,所有其他条件都相同?)

4

1 回答 1

3

根据经验,无论使用哪种语言,您都应始终避免为代码添加不必要的复杂性。尝试将代码拆分为语义上有意义的小节通常也是一个好主意。

鉴于这些启发式方法,没有明确的答案。这真的归结为你想要达到的目标。

我将通过示例来证明这一点。

如果我们有一个在继续之前检查各种错误条件的函数,那么在没有 的情况下编写它可能是有意义的else

def do_stuff():
    if error1():
        return cleanup_and_fail()
    return ok()

这会更好,因为您经常会以类似的方式依次检查多个错误:

def do_stuff():
    if error1():
        return cleanup_and_fail()
    if error2():
        return do_different_cleanup_and_fail()
    return ok()

但是,如果您的函数改为分支到两个相等的分支,那么它在语义上对您来说可能更有意义:

def do_stuff():
    if option1():
        return do_option1()
    else:
        return do_option2()

这是因为您通常最终会添加几个其他选项elif

def do_stuff():
    if option1():
        return do_option1()
    elif:
        return do_option2()
    else:
        return do_option3()

总结一下:考虑代码的语义并相应地选择语法。

于 2012-06-20T15:02:46.053 回答