如果导致垂直对齐,PEP 8 是否允许简单的悬挂缩进?

问题描述 投票:0回答:3

我正在学习 Python 样式,在阅读 PEP 8 时,我对以下内容感到困惑。根据 PEP 8,如果您使用悬挂缩进,您应该添加更多缩进以区分参数和函数体:

# More indentation included to distinguish this from the rest.
def long_function_name(
        var_one, var_two, var_three,
        var_four):
    print(var_one)

然后我找到了这段代码,想问一下在这种情况下,条件与其余的缩进级别相同是否有效。这应该被视为悬挂缩进吗?或者因为它垂直对齐就可以了?

if (value1 == 0 and value2 == 0 and
    value3 == 'valueX' and value4 == 'valueY' or
    value5 > value6):
    raise ValueError("test")
python pep8
3个回答
4
投票

http://pep8online.com/,您可以检查代码片段是否符合 PEP8。

如果你粘贴这个

if (value1 == 0 and value2 == 0 and
    value3 == 'valueX' and value4 == 'valueY' or
    value5 > value6):
    raise ValueError("test")

你会看到它给出以下内容

E125 第 3 行第 5 列:延续行无法与下一个逻辑行区分开来

进一步缩进第 3 行(4 个空格)会使错误消失。下面的代码是有效的,但看起来很奇怪。

if (value1 == 0 and value2 == 0 and
    value3 == 'valueX' and value4 == 'valueY' or
        value5 > value6):
    raise ValueError("test")

这样可能会更好读,这是另一个有效的解决方案:

if (value1 == 0 and value2 == 0 and
        value3 == 'valueX' and value4 == 'valueY' or
        value5 > value6):
    raise ValueError("test")

1
投票

阅读下面的PEP-8反例的评论:

# Further indentation required as indentation is not distinguishable
def long_function_name(
    var_one, var_two, var_three,
    var_four):
    print(var_one)

直接得出问题在于区分缩进的结论。因此,我想说你的例子需要进一步缩进。


0
投票

if-example 是有效的,因为它使用垂直对齐。请参阅 PEP8 推荐的缩进规则

上面写着

连续行应该使用 Python 的隐式行连接在圆括号、方括号和大括号内,或者使用悬挂缩进垂直对齐包裹的元素。

还举了一个例子:

# Aligned with opening delimiter.
foo = long_function_name(var_one, var_two,
                         var_three, var_four)
© www.soinside.com 2019 - 2024. All rights reserved.