具有多个参数和类型提示的方法的悬挂缩进的正确语法是什么?
在第一个参数下对齐
def get_library_book(self,
book_id: str,
library_id: str
)-> Book:
在下面缩进一级
def get_library_book(
self,
book_id: str,
library_id: str
) -> Book:
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<_>>>());
这是来自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<_>>>()
);
或者,如果要使用的参数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<_>>>()
);
与列对齐样式相反,这种纯压痕样式具有很多优点,而没有缺点。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句