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

Python 黑色格式化程序-忽略特定的多行代码,python,code-formatting,python-black,Python,Code Formatting,Python Black,我想通过blackpython格式化程序忽略特定的多行代码。特别是,这用于np.数组或矩阵构造,在格式化时会变得难看。下面是一个例子 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,

我想通过
black
python格式化程序忽略特定的多行代码。特别是,这用于
np.数组
或矩阵构造,在格式化时会变得难看。下面是一个例子

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中发现了这个问题,但这只适用于内联命令,我这里并没有

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

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

#fmt:关闭
np.数组(
[
[1, 0, 0, 0],
[0, -1, 0, 0],
[0, 0, 1, 0],
[0, 0, 0, -1],
]
)
#fmt:on

#fmt:off
禁用以下所有行的格式设置,直到使用
#fmt:on
再次激活格式设置。如果您愿意稍微更改代码,则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缺少内联注释的缺陷

问题不是说你可以在它前面加上
#fmt:off
,在它后面加上
#fmt:on
?啊,谢谢!这就像预期的一样!我尝试将其作为标题,但没有再次打开,这就是它不起作用的原因。这可以通过在
pyproject.toml
文件中配置exclude来完成吗?与其在每个文件中添加
#fmt:on/off
,我想为我的项目设置它。我对
pyproject.toml
了解不多,也许你可以提出一个新问题?