什么是PEP8的E128:延续线缩进为视觉缩进?

Oli*_*Oli 279 python pep8 sublimetext2

刚刚用Sublime Text(Sublime Linter)打开一个文件,发现了一个我以前从未见过的PEP8格式错误.这是文字:

urlpatterns = patterns('',
    url(r'^$', listing, name='investment-listing'),
)
Run Code Online (Sandbox Code Playgroud)

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

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

Gar*_*tty 448

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

urlpatterns = patterns('',
                       url(r'^$', listing, name='investment-listing'))
Run Code Online (Sandbox Code Playgroud)

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

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

urlpatterns = patterns(
    '', url(r'^$', listing, name='investment-listing'))
Run Code Online (Sandbox Code Playgroud)

我建议读一下PEP-8 - 它不是一个很长的文档,而且它很容易理解,不像一些技术性更强的PEP.

  • 请注意,PEP8还声明您应该忽略PEP8,这样做是有道理的,我认为在这种情况下是有意义的.随意为自己的项目不同意.在任何情况下,这将很快成为一个争论的焦点是使用`模式()`会在Django 1.8被弃用:https://docs.djangoproject.com/en/dev/releases/1.8/#django-conf-urls-patterns (25认同)
  • 这在我所看到的Django代码中是如此普遍存在(加上它的全部文档)它可以说取代PEP-8,毕竟它说"*许多项目有自己的编码风格指导.如果有任何冲突,这样特定于项目的指南优先于该项目.*" (6认同)
  • @TheHerk的基本原理可能是[`patterns()`](https://docs.djangoproject.com/en/dev/ref/urls/#patterns)的第一个参数是唯一的(指定其他所有内容的前缀) ,以及所有其他参数都是基本相同的url模式. (6认同)
  • @NickT你错误地阅读了PEP-8 - PEP-8建议遵循给定项目使用它的现有约定 - 但是在这种情况下代码不会进入Django,它会使用Django进入你的项目 - 没有必要遵循他们的惯例.该规则的目的是在代码库内保持一致性. (6认同)
  • 任何人都知道为什么Django这样做; 有充分的理由吗?似乎跟随PeP-8一样容易. (5认同)
  • @Lattyware如果你看一下Django文档,那就是*它们使用的格式*.如果您在自己的项目中使用`patterns()`,**PEP-8建议使用它们的格式**,因为它是Django的*事实上的*标准/约定. (3认同)

dis*_*ame 9

对于这样的语句(由PyCharm自动格式化)也是如此:

    return combine_sample_generators(sample_generators['train']), \
           combine_sample_generators(sample_generators['dev']), \
           combine_sample_generators(sample_generators['test'])
Run Code Online (Sandbox Code Playgroud)

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

    return \
        combine_sample_generators(sample_generators['train']), \
        combine_sample_generators(sample_generators['dev']), \
        combine_sample_generators(sample_generators['test'])
Run Code Online (Sandbox Code Playgroud)

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