if 表达式可以替换为“test”(简化的 if 表达式)

Nev*_*eha 4 python if-statement pylint

我正在尝试找出如何解决我遇到的 Pylint 问题。我对编码和 Python 比较陌生,从来没有真正学过如何简化 if 表达式。

我从这个开始

if variable_name == Labels.INVALID:
    marked_invalid = True
else:
    marked_invalid = False
Run Code Online (Sandbox Code Playgroud)

Pylint 给了我一个关于这句话的错误:

The if statement can be replaced with 'var = bool(test)' (simplifiable-if-statement)
Run Code Online (Sandbox Code Playgroud)

所以我把它改成这样:

marked_invalid = True if variable_name == Labels.INVALID else False
Run Code Online (Sandbox Code Playgroud)

现在我收到上述错误消息

The if expression can be replaced with 'test' (simplifiable-if-expression)
Run Code Online (Sandbox Code Playgroud)

我不知道从这里该去哪里。

Bop*_*reH 12

该表达式variable_name == Labels.INVALID的值为 或TrueFalse您正在测试该值以查看是否应将TrueFalse分配给marked_invalid

pylint 建议您直接分配值,而不进行测试:

marked_invalid = variable_name == Labels.INVALID
Run Code Online (Sandbox Code Playgroud)

有时我会在表达式两边添加括号,以避免将其与多重赋值混淆 ( a = b = C)。不是必需的,但(可以说)有助于可读性:

marked_invalid = (variable_name == Labels.INVALID)
Run Code Online (Sandbox Code Playgroud)

如果variable_name == Labels.INVALID为true,则marked_invalid将为true;如果为假,则marked_invalid将为假。

该建议提到是bool(因为您的条件不必是 just True/False。例如,if my_list:如果列表非空,则成功。所以它建议bool(强制该值是True/False(布尔值)。