Python黑色风格差异



我使用黑色来格式化我的python代码。我观察到以下行为。我承认这是一个非常特殊的案例,但它让我心烦。

让我们假设我有以下代码:

@pytest.mark.parametrize(
"first",
["second"],
)

black不改变这一点。但是,如果我去掉["second"]后面的逗号:

@pytest.mark.parametrize(
"first",
["second"]
)

black重新排序:

@pytest.mark.parametrize("first", ["second"])

另一方面,让我们看看以下内容:

@pytest.mark.parametrize(
"This is a very long line. Black will not be able to to a linebreak here.",
["second"],
)

在这种情况下,同样,black没有改变任何东西。到目前为止,一切顺利。现在,我再次删除["second"]后面的逗号:

@pytest.mark.parametrize(
"This is a very long line and black will not be able to do a line break here.",
["second"]
)

由于行太长,black不能像以前那样很好地将其重新排序为一行。但是,black["second"]:

后面添加了一个逗号。
@pytest.mark.parametrize(
"This is a very long line and black will not be able to do a line break here.",
["second"],
)

我不喜欢那样。当我在代码中遇到这样的列表时,我总是倾向于删除后面的逗号来强制一行重新排序。但是,在大多数情况下,black会再次添加它…

黑色行为在我的理解中是意料之中的,因为其中一个目的是限制git diff内的更改数量。

如果行太长,说明你已经在多行书写了。如果你是多行文字,那么它应该以逗号结束。

这样,如果您在元组,列表,…或方法或函数的参数中添加元素,它将不会为添加逗号的行生成差异。

如果你是单行文字,不太长,黑色会考虑你是否添加了一个尾昏迷。如果后面有逗号,则显示多行,如果没有逗号,则显示单行。

a = [1, 2,]
# goes to
a = [
1,
2,
]
# and
a = [1, 2]
# remains:
a = [1, 2]

最新更新