非常简单的问题:
特别是在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社区特别偏好哪个。 (例如,在标准库中更常使用哪一种,其他所有条件相同?)
答案 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()
总结一下:考虑代码的语义并相应地选择语法。