黑色格式化程序-忽略特定的多行代码

我想忽略由 black python 格式化程序编写的特定多行代码。特别是,这是用于 np.array或矩阵结构,这变得丑陋时,格式化。下面是一个例子。

np.array(
[
[1, 0, 0, 0],
[0, -1, 0, 0],
[0, 0, 1, 0],
[0, 0, 0, -1],
]
)
# Will be formatted to
np.array([[1, 0, 0, 0], [0, -1, 0, 0], [0, 0, 1, 0], [0, 0, 0, -1]])

我在 black github 中发现了 这个问题,但是这只适用于内联命令,这里没有。

对于多行代码,我能做些什么来实现这一点呢?

52438 次浏览

您可以按照问题链接中的解释使用 #fmt: on/off。在您的情况下,它看起来像:

# fmt: off
np.array(
[
[1, 0, 0, 0],
[0, -1, 0, 0],
[0, 0, 1, 0],
[0, 0, 0, -1],
]
)
# fmt: on

在使用 # fmt: on再次激活格式之前,# fmt: off禁用以下所有行的格式设置

如果你愿意稍微修改一下你的代码,那么 Black 会留下以下任何一个:

contents = [
[1, 0, 0, 0],
[0, -1, 0, 0],
[0, 0, 1, 0],
[0, 0, 0, -1],
]


np.array(contents)

这是因为多行列表中的结尾逗号是神奇的。布莱克认为这意味着你计划在将来扩展这个列表,虽然在这种情况下,它只是意味着布莱克的风格是不太可读的。不幸的是,当列表包装在那个额外的函数调用中时,后面的逗号并不能神奇地发挥作用。

np.array(
[
# just say anything
[1, 0, 0, 0],
[0, -1, 0, 0],
[0, 0, 1, 0],
[0, 0, 0, -1],
]
)

这是因为 Black 无法胜过 Python 缺少内联注释的情况!

最新版本的 black (> = 21.0)考虑了最后一个元素后面的逗号。

所以:

np.array(
[
[1, 0, 0, 0],
[0, -1, 0, 0],
[0, 0, 1, 0],
[0, 0, 0, -1]
]
)

格式如下:

np.array([[1, 0, 0, 0], [0, -1, 0, 0], [0, 0, 1, 0], [0, 0, 0, -1]])

(注意没有最后一个逗号)

相反

np.array([[1, 0, 0, 0], [0, -1, 0, 0], [0, 0, 1, 0], [0, 0, 0, -1],])

格式如下:

np.array(
[
[1, 0, 0, 0],
[0, -1, 0, 0],
[0, 0, 1, 0],
[0, 0, 0, -1],
]
)

(注意最后一个逗号)