【发布时间】:2019-01-18 01:27:18
【问题描述】:
不好:
my_result = MyObject.my_method(first_parameter, second_parameter,
MyOtherObject.other_method(first, second))
- 很快达到行长限制,尤其是在存在嵌套调用/列表时。
- 如果有任何内容被重命名,则必须更改第 2 行的缩进。
- 必须为每个新参数添加一堆缩进。
- 一般不与默认缩进的倍数对齐。
- 找到第 N 个参数的速度较慢,因为我必须同时进行垂直和水平扫描。
好:
my_result = MyObject.my_method(
first_parameter,
second_parameter,
MyOtherObject.other_method(first, second),
)
- 比上面的代码更容易扫描,因为第一个参数与方法名称分离得更远。
- 更容易找到第 N 个参数。
- 尾随逗号表示添加新参数时的差异仅为一行。
换句话说:
- 仅当所有参数与方法调用位于同一行时,才将多个参数放在同一行。
- 尽量减少任何更改的差异复杂性。
这种模式有名称吗?
(用例是我想找到一个 linter 来检查它,但首先我需要知道它叫什么。)
【问题讨论】:
-
PEP 8 使用术语“悬挂缩进”。如果你找到了这样的 linter,请告诉我 :)
-
@Ry- 看起来 hanging indent 是故事的一部分,但 PEP 8 仍然在多行调用中的每一行放置多个参数。
-
你指的是
AST吗? -
我为此写了一个格式化程序:github.com/asottile/add-trailing-comma -- black 也支持这种风格
-
有点拗口:多行方法调用(尽管它也适用于函数、导入、classdefs、functiondefs)-- tbh 它实际上并不是一个好名字