我正在学习 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")
在 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")
阅读下面的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)
直接得出问题在于区分缩进的结论。因此,我想说你的例子需要进一步缩进。
if-example 是有效的,因为它使用垂直对齐。请参阅 PEP8 推荐的缩进规则
上面写着
连续行应该使用 Python 的隐式行连接在圆括号、方括号和大括号内,或者使用悬挂缩进垂直对齐包裹的元素。
还举了一个例子:
# Aligned with opening delimiter.
foo = long_function_name(var_one, var_two,
var_three, var_four)