我也无法使用您上面显示的代码重现您的 PEP8 警告。也许你可以把你的确切代码放在一个 pastebin 中?
PEP8 的示例测试用例(如果您使用 --show-pep8 选项)如下:
Avoid extraneous whitespace in the following situations:
- Immediately inside parentheses, brackets or braces.
- Immediately before a comma, semicolon, or colon.
Okay: spam(ham[1], {eggs: 2})
E201: spam( ham[1], {eggs: 2})
E201: spam(ham[ 1], {eggs: 2})
E201: spam(ham[1], { eggs: 2})
E202: spam(ham[1], {eggs: 2} )
E202: spam(ham[1 ], {eggs: 2})
E202: spam(ham[1], {eggs: 2 })
E203: if x == 4: print x, y; x, y = y , x
E203: if x == 4: print x, y ; x, y = y, x
E203: if x == 4 : print x, y; x, y = y, x
另外,我实际上并没有使用过 Textmate,但是如果您正在执行类似于 emacs 的 flymake 模式的动态检查,那么也可能是 pep8 在文件的旧版本上被调用,问题可能会发生保存文件时离开。我们可能需要更多信息来进一步调试。
至于列表理解本身的格式,您可能想看看这个其他 SO question以及来自 Google style guide 的内容。我个人对你的做法没有意见。我想你也可以做类似的事情
def _question_tuple(q):
return (
q,
q.vote_set.filter(choice__exact='Y'),
q.vote_set.filter(choice__exact='N'),
request.session.get(str(q.id))
)
question_tups = [_question_tuple(q) for q in questions]
但这实际上是关于什么是最可读/最可维护的,这取决于您自己的判断。