括号闭合的缩进

8

注意:不要相信原问题中的任何内容,请查看底部的更新。


原始问题

我相信PEP8风格指南说:

some_kind_of_list = [
    1, 2, 3,
    4, 5, 6
    ]

def function_that_takes_long_arguments(
    long_argument_1,
    long_argument_2
    ):
    return long_argument_1

并且

some_kind_of_list = [
    1, 2, 3,
    4, 5, 6
]

def function_that_takes_long_arguments(
    long_argument_1,
    long_argument_2
):
    return long_argument_1

两者都可以接受,但是如果我以后转用C++,使用其中一个是否有意义呢?


更新

为了澄清事实,函数定义的常见样式为:

def function_that_takes_long_arguments(
        long_argument_1,
        long_argument_2):
    pass  # Note the extra indentation in the 2 lines above

# or

def function_that_takes_long_arguments(long_argument_1,
                                       long_argument_2):
    pass

对于函数调用,则是这样的:
function_that_takes_long_arguments(
    long_argument_1,
    long_argument_2
)

# or

function_that_takes_long_arguments(
    long_argument_1,
    long_argument_2)

# or

function_that_takes_long_arguments(long_argument_1,
                                   long_argument_2)

1
不要因此而熬夜。做对你来说更易读的事情。 - Roy Iacob
https://www.python.org/dev/peps/pep-0008/#code-lay-out中,我没有找到函数调用时将尾部/闭合括号放在单独一行的规定。 - Kai
3个回答

6
我通常会使用 <\p>。
some_kind_of_list = [
    1, 2, 3,
    4, 5, 6,
]

def function_that_takes_long_arguments(
    long_argument_1,
    long_argument_2,
):
    return long_argument_1

这样缩进就会更加明显。此外,在最后一个参数末尾加上逗号,可以方便地添加新的参数,而不需要改变其他行,通常对于 Git blame 目的是有好处的,并且使得差异中的杂波更少。

2

pep8是Python代码风格指南检查器,它认为这两段代码都不可接受。

第一个选项:

$ pep8 test_pep.py 
test_pep.py:10:5: E125 continuation line with same indent as next logical line

第二个选项(无警告):
$ pep8 test_pep.py 
$

正如你所见,对于列表来说,两种方法都可以。但是对于函数而言,第二种方法更受欢迎,因为在第一种代码片段中函数体缩进与前一行相同,这会对可读性造成负面影响。


0

我并不特别喜欢这种风格,我刚刚检查了一下,在PEP 8中也没有提到它,而且它可能会干扰任何一个IDE折叠代码块的能力(在我工作用Python时确实会出现这种情况):

def function_that_takes_long_arguments(
    long_argument_1,
    long_argument_2
):
    return long_argument_1

我宁愿你避免它,而改为做以下操作:

def function_that_takes_long_arguments(
  long_argument_1,
  long_argument_2):
    return long_argument_1

或者

def function_that_takes_long_arguments(long_argument_1,
                                       long_argument_2):
    return long_argument_1

列表样式可能无论哪种方式都可以。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接