PEP 8是否允许因垂直对齐而使用简单的悬挂缩进?
我正在学习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")
3 个回答
-1
这个 if 的例子是有效的,因为它使用了垂直对齐。你可以查看 PEP8 推荐的缩进规则
它的意思是
当代码行过长需要换行时,换行的部分应该要么在括号、方括号或大括号内垂直对齐,要么使用悬挂缩进。
接下来还给出了一个例子:
# Aligned with opening delimiter.
foo = long_function_name(var_one, var_two,
var_three, var_four)
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)
这直接让我们得出结论,问题在于区分缩进。因此,我想说你的例子需要进一步的缩进。
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")