在python中使用类型提示挂起缩进的缩进的合适缩进级别是多少?

妮莉

具有多个参数和类型提示的方法的悬挂缩进的正确语法是什么?

在第一个参数下对齐

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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Python return语句缩进级别

Python IndentationError unindent与任何外部缩进级别都不匹配

Python Regex按缩进级别匹配XML

Python停止执行当前缩进级别

MSOutlook:在不同的缩进级别上使用不同的格式

在 python tkinter 上出现奇怪的缩进错误 - unindent 与任何外部缩进级别都不匹配

C#-计数缩进级别XML

什么是JSON缩进级别约定?

检查样式缩进违规-'public'的缩进级别为4,预期级别应为8

错误- IndentationError: unindent 不匹配任何外部缩进级别

如何在argparse中降低参数帮助的缩进级别?

Intellij Vue 项目在 <script> 标签后更改缩进级别

IndentationError:unindent与任何外部缩进级别都不匹配

强制PHP换行符遵守当前的缩进级别

unindent 不匹配任何外部缩进级别 - 括号

如何在Android Studio上添加/删除缩进级别

unindent 不匹配任何外部缩进级别 1

基于缩进级别复制粘贴循环

IndentationError unindent 不匹配任何外部缩进级别

unindent 与 pygame 上的任何外部缩进级别都不匹配

python shell中的“IndentationError:unindent不匹配任何外部缩进级别”

在python中将数据转换为日期格式,但unindent不匹配任何外部缩进级别

IndentationError:unindent与python中的任何外部缩进级别错误都不匹配

编译Python代码时unindent与任何外部缩进级别错误都不匹配

用python IndentationError编码的Discord机器人:unindent与任何外部缩进级别都不匹配

PYTHON ERROR:IndentationError:unindent与任何外部缩进级别都不匹配

Python 3 任务命令,IndentationError:unindent 不匹配任何外部缩进级别

Python:缩进

缩进python