用Python关闭括号
作者:互联网
PEP 8有相互矛盾的代码示例(在我看来),我很好奇定位闭括号的惯例是什么.
在indentation的顶部,它们与参数在同一条线上.在底部附近讨论定位,而是说:
The closing brace/bracket/parenthesis on multiline constructs may
either line up under the first non-whitespace character of the last
line of list[…] or it may be lined up under the first character of the
line that starts the multiline construct[…]
这与上面的代码示例直接冲突.
你在哪里通常将你的结束括号放在多行语句中,你认为在惯例方面最佳做法是什么?
为了清楚起见,这里是代码示例,它们展示了这些差异.
foo = long_function_name(
var_one, var_two,
var_three, var_four)
result = some_function_that_takes_arguments(
'a', 'b', 'c',
'd', 'e', 'f',
)
result = some_function_that_takes_arguments(
'a', 'b', 'c',
'd', 'e', 'f',
)
解决方法:
你提到的两个部分是不同的,第一部分是关于一个块后面的连续行(例如多行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背景,我使用第二个选项.
标签:convention,python,pep8 来源: https://codeday.me/bug/20190731/1587054.html