如何让Black格式化工具保留链式方法调用的逐行格式?
让Black保留链式方法调用的换行格式
我在使用Black格式化Python代码时,希望保留这种清晰的每行一个方法的链式调用结构:
result = ( data .some_method() .some_other_method(arg1, arg2) .yet_another_method_with_longer_name(arg3) )
但Black总是自动将其压缩为一行:
result = data.some_method().some_other_method(arg1, arg2).yet_another_method_with_longer_name(arg3)
官方文档对调用链的格式化规则描述比较模糊,我不想用#fmt: on/off这类注释(会导致代码中充斥大量此类标记),想找类似"魔法尾随逗号"的方式来强制保留换行格式。
可行方案:用反斜杠强制换行
在括号内的起始对象(如示例中的data)末尾添加一个反斜杠,Black就会尊重你手动设置的换行格式:
result = ( data\ .some_method() .some_other_method(arg1, arg2) .yet_another_method_with_longer_name(arg3) )
额外说明
Black默认逻辑是:短链式调用会被合并成一行,只有当调用链长度超过设定行宽时才会自动换行。上述方法利用Python的行延续符规则,明确告知Black你需要每行一个方法的格式,无需依赖行宽限制触发自动换行。
内容的提问来源于stack exchange,提问作者Ken Williams
相关产品推荐
相关产品推荐

