Python正确代码格式(PEP8)

2024-04-19 16:45:18 发布

您现在位置:Python中文网/ 问答频道 /正文

所以我刚学习了python中的"List Comprehensions"。其中一些对于一行(PEP8)来说太长了,我正试图找出最好的(最可读的)方法来打破这些。在

我想出了这个

questions = [
    (
        q,
        q.vote_set.filter(choice__exact='Y'),
        q.vote_set.filter(choice__exact='N'),
        request.session.get(str(q.id))
    )
    for q in questions
]

但是它仍然抱怨]之前的空白,具体的pep8错误是E202

这是一个缩进块。在


Tags: 方法getrequestsessionfilterlistexactquestions
3条回答

我可能会这样做:

questions = [(q, 
              q.vote_set.filter(choice__exact='Y'), 
              q.vote_set.filter(choice__exact='N'), 
              request.session.get(str(q.id)))
                  for q in questions]

请记住,PEP8是要与您的最佳判断一起使用的;它们并不是要在所有情况下都绝对遵循的。当多个规则冲突时,它们的结构也不总是有意义的。在

偶尔故意打破规则是可以的;这样的跳棋只是为了确保你不会无意中违反规则。在

编辑:将我的评论移到我的答案中。在

您的代码看起来有点太像Lisp类括号语言或C类花括号语言,因为您将括号和括号放在单独的行中。在

在Python中,您只需使用缩进来显示通常在另一种语言中用括号/圆括号/大括号显示的内容。如果你用你的代码做了修改,它和我的版本是一样的。在

不过,别太担心政治士气检查。如果你真的喜欢把括号和方括号放在不同的行中得到额外的空格,那么就这样做吧。它不会使它成为“坏代码”,也不会降低可读性。在

考虑使用generator expression编写语句。在

questions = ((q,
              q.vote_set.filter(choice__exact='Y'),
              q.vote_set.filter(choice__exact='N'),
              request.session.get(str(q.id)),) 
             for q in questions)

另外,并不是说它是“错误的”,但总的来说,我不建议重新定义声明的变量,因为它可能会导致代码混乱。在本例中,您正在将questions实例更改为其他类型。在

我想得看工具了。哪个工具提供E202?我复制粘贴并尝试使用这个pep8工具,它没有给出任何错误。但是我特别地在questions之后加了一个空格,得到了错误。在

]上的E202表示,它正在查找之前的空白。确保代码中没有这个。试着在提问后尽快结束]。在

相关问题 更多 >