首选Python(或任何语言,真正的)样式:if if返回时应该使用吗?

时间:2012-06-20 14:47:13

标签: coding-style python

非常简单的问题:

特别是在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社区特别偏好哪个。 (例如,在标准库中更常使用哪一种,其他所有条件相同?)

1 个答案:

答案 0 :(得分: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()

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