【问题标题】:Black formatter - Ignore specific multi-line code黑色格式化程序 - 忽略特定的多行代码
【发布时间】:2020-02-23 08:01:54
【问题描述】:

我想通过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 问题,但这仅适用于内联命令,这不是我在这里所拥有的。

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

【问题讨论】:

  • 问题不是说你可以在它前面加上# fmt: off,在它后面加上# fmt: on

标签: python code-formatting python-black


【解决方案1】:

如果您愿意稍微更改您的代码,那么 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,虽然在这种情况下它只是意味着布莱克的风格不是很可读。不幸的是,当列表包含在该额外的函数调用中时,尾随的逗号并不能足够工作。

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

这是因为 Black 无法胜过 Python 缺乏内联 cmets!

【讨论】:

    【解决方案2】:

    您可以使用#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 再次激活格式化

    【讨论】:

    • 啊,谢谢!这按预期工作!我尝试将它作为标题但没有再次打开它,这就是它不起作用的原因。
    • 这可以通过在pyproject.toml文件中配置排除来完成吗?我不想在每个文件中添加#fmt: on/off,而是想为我的项目设置它。
    • 我对@9​​87654327@了解不多,也许你可以开一个新问题?
    • 在对文档进行了一些挖掘之后,我还发现您还可以使用 # fmt: skip 跳过个别行。
    • 请注意,如果您尝试最小化您禁用格式设置的行并将# fmt: off 放入语句中,黑色会给您一个错误。
    猜你喜欢
    • 1970-01-01
    • 2020-06-08
    • 2010-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-18
    • 2014-07-18
    • 1970-01-01
    相关资源
    最近更新 更多