你提到的两个部分是不同的,第一个部分讲的是跟随块(如多行
def
或
if
语句)的连续行,而第二个部分则是关于赋值和函数调用时的闭合括号和括号。当开始一个块时,你不希望将闭合括号放在下一行的开头,因为回到原始缩进表示块的结束。以下是几个明显看起来奇怪的例子:
def long_function_foo(
var_one, var_two, var_three,
var_four
):
print('This code really looks out of place')
def long_function_bar(
var_one,
var_two
):
print('and so does this one')
PEP8 允许使用所谓的垂直对齐方式,各种 PEP 中的许多示例都使用了这种约定,这已成为 Python IDE 的自动化特性:
def long_function_name(var_one, var_two, var_three,
var_four, var_five):
"""Documentation would go here, which makes it look better."""
print(var_one + var_two + var_three)
但我个人避免使用它。这是一个基于观点的话题,但我不喜欢依赖于特定数量空格的对齐方式。这很繁琐且过于依赖IDE智能缩进。我更喜欢这种表示法,它被PEP8允许,但似乎不太流行。请注意,双重缩进用于与函数体区分:
def long_function_name(
alpha, bravo, charlie, delta, echo, foxtrot,
hotel, indiana):
"""Documentation would go here."""
print(var_one + var_two + var_three)
当涉及到函数调用和赋值时,PEP8没有明确的答案。有人可能会缩进右括号,以模仿当下一条指令缩进较少时块的结尾。
foo = bar(
1, 2, 3
)
竖直对齐非常流行,我承认它看起来很好,但是我不想强制未来读者在我的代码中使用缩进大小,所以我避免使用它:
foo = bar(1, 2, 3, 5, 6, 7, 8, 9,
10, 11, 12, 13, 14)
或者也可以把右括号/右圆括号放在靠左的位置:
foo = bar(
1, 2, 3
)
我来自C++、Java和JavaScript背景,我使用后者的选项。从技术上讲,你也可以将右括号放在与参数相同的行上,但这会使它看起来像是一个缩进的代码块,这不符合我的口味,而且我没有见过人们这样做。