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

时间:2019-10-27 23:59:28

标签: python code-formatting python-black

我想通过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中发现了this问题,但这仅适用于内联命令,而我在这里没有。

对于多行代码,我可以做些什么吗?

2 个答案:

答案 0 :(得分:4)

您可以按照链接的问题中的说明使用#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: off禁用以下所有行的格式设置,直到使用# fmt: on重新激活格式设置为止

答案 1 :(得分:4)

如果您愿意稍微更改代码,那么Black会单独留下以下任一内容:

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

np.array(contents)

这是因为多行列表中的结尾逗号是魔术。 Black takes it to mean that you plan to extend the list in future,尽管在这种情况下,这仅意味着Black的风格不太可读。不幸的是,当列表包含在额外的函数调用中时,尾部逗号不足以使它们正常工作。

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

这是因为Black不能胜过Python缺少内联注释!