Nel*_*lly 7 python pep8 type-hinting python-3.x
具有多个参数和类型提示的方法的悬挂缩进的正确语法是什么?
在第一个参数下对齐
def get_library_book(self,
book_id: str,
library_id: str
)-> Book:
Run Code Online (Sandbox Code Playgroud)
缩进一层
def get_library_book(
self,
book_id: str,
library_id: str
) -> Book:
Run Code Online (Sandbox Code Playgroud)
PEP8支持凹槽下面的一个级别,但不指定是否允许在第一个参数下进行对齐.它指出:
使用悬挂式凹痕时,应考虑以下因素; 第一行应该没有参数,应该使用进一步的缩进来明确区分自己作为延续线.
PEP8 中有很多很好的想法,但我不会依赖它来决定这种关于空格的问题。当我研究 PEP8 关于空白的建议时,我发现它们不一致甚至相互矛盾。
相反,我会研究适用于几乎所有编程语言的一般原则,而不仅仅是 Python。
第一个示例中显示的列对齐有很多缺点,我不会在我的任何项目中使用或允许它。
一些缺点:
如果在更复杂的情况下使用列对齐,情况会更糟。考虑这个例子:
let mut rewrites = try_opt!(subexpr_list.iter()
.rev()
.map(|e| {
rewrite_chain_expr(e,
total_span,
context,
max_width,
indent)
})
.collect::<Option<Vec<_>>>());
Run Code Online (Sandbox Code Playgroud)
这是来自 Servo 浏览器的 Rust 代码,其编码风格要求这种列对齐。虽然它不是 Python 代码,但完全相同的原则适用于 Python 或几乎任何语言。
在此代码示例中,列对齐的使用如何导致糟糕的情况应该很明显。如果你需要在嵌套rewrite_chain_expr调用中调用另一个函数,或者有一个更长的变量名怎么办?除非您想排很长的队,否则您几乎没有空间了。
将上述版本与使用纯基于缩进的样式的任一版本进行比较,例如您的第二个 Python 示例:
let mut rewrites = try_opt!(
subexpr_list
.iter()
.rev()
.map( |e| {
rewrite_chain_expr( e, total_span, context, max_width, indent )
})
.collect::<Option<Vec<_>>>()
);
Run Code Online (Sandbox Code Playgroud)
或者,如果 to 的参数rewrite_chain_expr更长,或者您只想要更短的行:
let mut rewrites = try_opt!(
subexpr_list
.iter()
.rev()
.map( |e| {
rewrite_chain_expr(
e,
total_span,
context,
max_width,
indent
)
})
.collect::<Option<Vec<_>>>()
);
Run Code Online (Sandbox Code Playgroud)
与列对齐样式相比,这种纯缩进样式有很多优点,完全没有缺点。
| 归档时间: |
|
| 查看次数: |
598 次 |
| 最近记录: |