什么是 PEP8 的 E128:为视觉缩进而缩进不足的续行?

Posted

技术标签:

【中文标题】什么是 PEP8 的 E128:为视觉缩进而缩进不足的续行?【英文标题】:What is PEP8's E128: continuation line under-indented for visual indent? 【发布时间】:2013-03-04 08:50:44 【问题描述】:

刚刚使用 Sublime Text(使用 Sublime Linter)打开了一个文件,并注意到我以前从未见过的 PEP8 格式错误。正文如下:

urlpatterns = patterns('',
    url(r'^$', listing, name='investment-listing'),
)

它标记了第二个参数,即以url(...)开头的行

我正要在 ST2 中禁用此检查,但 我想在忽略它之前知道我做错了什么。你永远不知道,如果这看起来很重要,我什至可能会改变我的方式:)

【问题讨论】:

【参考方案1】:

PEP-8 recommends 如果您在第一行放置任何内容,则将行缩进到左括号,因此它应该缩进到左括号:

urlpatterns = patterns('',
                       url(r'^$', listing, name='investment-listing'))

或者不在起始行放置任何参数,然后缩进到统一的级别:

urlpatterns = patterns(
    '',
    url(r'^$', listing, name='investment-listing'),
)

urlpatterns = patterns(
    '', url(r'^$', listing, name='investment-listing'))

我建议通读 PEP-8 - 你可以浏览很多内容,而且它很容易理解,不像一些技术性更强的 PEP。

【讨论】:

任何人都知道 Django 为什么这样做;有充分的理由吗?似乎跟 PeP-8 一样容易。 这在我见过的 Django 代码中非常普遍(而且在他们的文档中),它可以说取代 PEP-8,毕竟它说“许多项目都有自己的编码风格指南。如果发生任何冲突,此类项目特定指南优先于该项目。" @NickT 你误读了 PEP-8 - PEP-8 建议遵循给定项目使用它的现有约定 - 但在这种情况下,代码不会进入 Django,它会进入你的使用 Django 的项目 - 无需遵循他们的约定。该规则的目的是保持代码库内部的一致性。 请注意,PEP8 还指出您应该在有意义的情况下忽略 PEP8,我认为在这种情况下是有意义的。随意不同意您自己的项目。无论如何,这将很快成为一个有争议的问题,因为在 Django 1.8 中将不推荐使用 patterns():docs.djangoproject.com/en/dev/releases/1.8/…【参考方案2】:

这也适用于这样的语句(由 PyCharm 自动格式化):

    return combine_sample_generators(sample_generators['train']), \
           combine_sample_generators(sample_generators['dev']), \
           combine_sample_generators(sample_generators['test'])

这将给出相同的样式警告。为了摆脱它,我不得不将其重写为:

    return \
        combine_sample_generators(sample_generators['train']), \
        combine_sample_generators(sample_generators['dev']), \
        combine_sample_generators(sample_generators['test'])

【讨论】:

我更喜欢括号而不是反斜杠,第一行是return (,然后每个可返回的项目都在自己的行上,缩进,最后是右括号在单独的行上,缩进级别与return编辑: 像这样pastebin.com/fAe7558X @MarkusMeskanen 是的,我也是。我只是想指出,即使是自动格式也不完全符合这个规范。

以上是关于什么是 PEP8 的 E128:为视觉缩进而缩进不足的续行?的主要内容,如果未能解决你的问题,请参考以下文章

pep8介绍

遵循PEP8风格指南

3.PEP 8是什么?

Python 常用PEP8规范

Python 常用 PEP8 编码规范和建议

python代码规范