gpt4 book ai didi

python - 用 Python 关闭大括号

转载 作者:太空狗 更新时间:2023-10-30 00:53:06 26 4
gpt4 key购买 nike

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',
)

最佳答案

您提到的两个部分的不同之处在于,第一部分是关于连续行,后面是一个 block (例如多行 defif 语句),而第二个是关于在矫揉造作和函数调用上关闭大括号和圆括号。当开始一个 block 时,您不希望将右括号放在下一行的开头,因为返回到原始缩进表示 block 结束。一些看起来很奇怪的例子:

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 没有明确的答案。人们可能会缩进右括号,作为一种模仿下一条指令缩进较少时 block 如何结束的方式。

foo = bar(
1, 2, 3
)

垂直对齐非常流行,我承认它看起来不错,但我不想对我的代码的 future 读者强制缩进大小,所以我避免了这种情况:

foo = bar(1, 2, 3, 5, 6, 7, 8, 9,
10, 11, 12, 13, 14)

或者也可以将右大括号/圆括号左对齐:

foo = bar(
1, 2, 3
)

我有 C++、Java 和 JavaScript 背景,所以我选择了后者。从技术上讲,您也可以将右括号与参数放在同一行,但这样会使它看起来像一个缩进的代码块,对我来说太过分了,而且我真的没有见过人们这样做。

关于python - 用 Python 关闭大括号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51016397/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com