有了pylint,我知道当您将“ return”放在“ else”中时会触发R1705警告。
这是警告:
R1705: Unnecessary "else" after "return" (no-else-return)
这就是文档所说的:
Unnecessary “else” after “return” Used in order to highlight an unnecessary block of code following an if containing a return statement. As such, it will warn when it encounters an else following a chain of ifs, all of them containing a return statement.
将触发R1705的代码段:
if CONDITION1:
return something1
else:
return something2
关闭警告的所需解决方法:
if CONDITION1:
return something1
return something2
真的需要遵守吗?有什么好处?我的意思是我了解,从函数返回某些信息后,就无法再返回并阅读更多代码了。
但是我发现使用'else'更有条理。
答案 0 :(得分:2)
如果您要遵守Mozilla Coding Style 或类似 那么R1705才有意义。 报价:
不要在返回(或休息)后再输入else。删除else,这是不必要的,并增加了缩进级别。
否则,您可能希望禁用该警告。
更好的是,考虑切换到flake8
,
如果您一直在编写明智的代码,往往会保持沉默。
在Mozilla社区之外,
大多数人宁愿看到简单的并行功能子句
用else
处理,如下所示:
def max(a, b):
if a > b:
return a
else:
return b
答案 1 :(得分:1)
此post给出了两种不同的设计决策案例:
保护条款。
static void Main(string[] args)
{
//Rather than making a string you need to split into an array just start with one.
string[] targetValues = { "One", "Two" };
//You don't need to use Upper Case for String when creating a this list
List<string> queryValues = new List<string>
{
"One",
"Two",
"One",
"Two",
"Three",
"Four"
};
// Comparison done here
List<string> results = queryValues.Where(x => targetValues.Contains(x)).ToList();
// Seperating the list for the printout for easier viewing
Console.WriteLine(string.Join(", ", results));
}
作者认为,对于几种这样的条件,它们的反演和def try_something()
if precondition():
result = compute_something()
return result
else:
display_error()
return None
更好:
implicit else
对称子句。
# Implicit else, inverted condition
def try_something():
if not precondition_one():
display_error_one()
return
if not precondition_two():
display_error_two()
return
result = compute_something()
return result
我同意作者的观点,在这里显性更好。
我还要引用该帖子的评论,其中说,这种选择是范式的选择:
- “其他显式”:“ if-then-else”被视为惰性计算,并且更适合“功能优先”的环境。如果将此“ if-then-else”应用于大型数据集和F#,Scala,Haskel,Closure甚至SQL中的代码,则首选显式。语言/平台本身很可能会鼓励编写“纯”代码,并阻止/使几乎不可能的事情成为必不可少的特技。
- “隐含其他/(显式回报)”:计算取决于100%的副作用,结果也是副作用的组合。无论如何,不可能严格地保证正确性,因此显式返回将成为明确的声明:“由于我们宇宙中的物理定律,这种计算可能会出错。在大多数情况下,将返回默认值。”