ChatGPT解决这个技术问题 Extra ChatGPT

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

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

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

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

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


G
Gareth Latty

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,毕竟它说“许多项目都有自己的编码风格指南。如果发生任何冲突,这样的项目- 特定指南优先于该项目。”
@TheHerk 的基本原理可能是 patterns() 的第一个参数是唯一的(指定其他所有参数的前缀),所有其他参数都是基本相同的 url 模式。
@NickT您误读了PEP-8-PEP-8建议遵循给定项目使用它的现有约定-但在这种情况下,代码不会进入Django,而是使用Django进入您的项目-不需要遵循他们的约定。该规则的目的是保持代码库内部的一致性。
请注意,PEP8 还声明您应该在有意义的情况下忽略 PEP8,我认为在这种情况下是有意义的。随意不同意您自己的项目。无论如何,这将很快成为一个争论点,因为在 Django 1.8 中将不推荐使用 patterns()docs.djangoproject.com/en/dev/releases/1.8/…
S
Stefan Falk

这也适用于这样的语句(由 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 是的,我也是。我只是想指出,即使是自动格式也不完全符合这个规范。