在Python中,如何调整Black格式化程序(如果可能的话)?

70

我知道Black是一种有主见的格式化工具,但除了一个主要问题外,我喜欢它所做的一切。当我有一个带有多个参数的函数时,它不会像这样显示:

def example_function(arg_1: str, arg_2: bool, arg_3: int = 0, arg_4: int = 1, arg_5: float = 0.0):
    pass

为了更好的可读性,我宁愿将其显示如下:

def example_function(
    arg_1: str, 
    arg_2: bool, 
    arg_3: int = 0, 
    arg_4: int = 1, 
    arg_5: float = 0.0
):

这个问题能用Black或其他格式化工具解决吗?我遇到过这个问题好几次,这让我考虑不再使用Black,要么换其他工具,要么就不用任何工具。

有什么想法或评论吗?


也许 blue 支持这个功能:https://blue.readthedocs.io/en/latest/ - guettli
3个回答

80
这是因为black的默认行长比您想要的长 - 每行88个字符
要缩短行长,您可以使用文档中记录的--line-length标志: https://black.readthedocs.io/en/stable/usage_and_configuration/the_basics.html 例如:
$ black --line-length 80 example.py

Black在这里更详细地解释了--line-length设置:

https://black.readthedocs.io/en/stable/the_black_code_style/current_style.html#line-length

行长度

你可能已经注意到了奇怪的默认行长度。 Black默认为每行88个字符,这恰好比80多10%。发现这个数字可以产生比保持80(最流行的)或甚至79(标准库使用)更短的文件。通常,90左右似乎是明智的选择

如果你按代码行数计费,可以将--line-length设置为较低的数字。Black会尽量尊重这一点。但是,在某些情况下,它无法遵守而不违反其他规则。在这些罕见的情况下,自动格式化的代码将超出您允许的限制。

您也可以增加它,但请记住,视力障碍者发现超过100个字符的行长度更难处理。它还会对典型屏幕分辨率上的并排差异审查产生不利影响。长行还会使在文档或演示文稿中整洁地呈现代码更加困难。

最后一段强调。

我建议只保持默认设置。 Black的美妙之处在于它为您选择,从而预先防止了任何关于哪种方式是“最佳”的争论。


2
谢谢,最终我将其减少到60,因为我通常在VScode上使用分割窗口,这很适合。非常好的答案!我也喜欢那个关于90年代的视频,很棒。+1 - Patrick Da Silva
4
有一个名为“-l”的别名。 - Wasi Master
2
更改行长度的另一个问题在于运行 Black 的“下一个人”。他必须知道你选择了什么,否则许多行将被修改。 - sqqqrly
1
@sqqqrly 你可以在 pyproject.toml 文件中直接设置你偏好的行长度。 - alexia
1
@RTD 在引用的文本中提到了这一点:“甚至是79(标准库使用)……” 79个字符的原因是基于在没有现代屏幕分辨率的监视器上拥有并排编辑器。今天,您可以轻松地在单行上容纳更多字符,而88个字符则避免了不必要的换行,使得行长稍微长一些但又不至于太长难以跟踪。 - damon
显示剩余2条评论

54

现在,只需在最后一个参数后面添加逗号即可实现此操作。

在您的示例中,您将写入:

def example_function(
    arg_1: str, 
    arg_2: bool, 
    arg_3: int = 0, 
    arg_4: int = 1, 
    arg_5: float = 0.0, # <-- Notice the trailing comma
):

2
很遗憾,没有选项可以每次添加这个额外的逗号,并且每行只有1个参数,而不是调整行长度。Prettier在NodeJs TS环境中处理得更好,我认为Black可以从这个工具中获得灵感。 - Vincent
很好,这正是我在寻找的。 - undefined

4
当我在https://black.now.sh使用Black playground时,我发现您的函数被重新格式化,就像行长度足够短(特别是78个字符处)。
也许有一个特殊的配置选项,专门控制函数参数行的行长度,这可能很好。但似乎Black的无配置方法意味着没有更多定制选项来控制这一点。

谢谢提供的链接,我试了一下 black.now.sh,非常值得!感谢你的回答。+1 - Patrick Da Silva

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接