列表理解和/或与新行间隔

时间:2012-02-09 12:29:30

标签: python pep8

这似乎是一个非常简单的问题;但我看不出它是如何实际可能的。我通常认为我的代码符合PEP8标准。 83个字符是很好的东西。我有一个很长的列表(字典)理解与一个or相结合,我正试图采用一个新行,但我无法弄清楚如何将or带到新的-line。

更简化的版本是:

>>> test = {'a' : None, 'b' : None}
>>> b = ','.join([k for k in test
...               if test[k]]) or 'hello'

无论何时(无论何时)我试图将or 'hello'置于新线上,它都会失败;命令行解释器和emacs的解析器也不理解,因此可能无法实现。

是否可以将or 'hello'放在新行上,如果可以,它会去哪里?

3 个答案:

答案 0 :(得分:4)

括在括号中。这将有效。

>>> test = {'a' : None, 'b' : None}
>>> b = (','.join([k for k in test if test[k]])
...      or 'hello')

答案 1 :(得分:2)

如果一行太长,请将其拆分为多个语句以增强可读性:

b = ','.join(k for k in test if test[k])
if not b:
    b = 'hello'

(我还将列表理解更改为更合适的生成器表达式。)

答案 2 :(得分:2)

使用反斜杠明确标记续行:

>>> test = {'a' : None, 'b' : None}
>>> b = ','.join([k for k in test if test[k]]) \
...          or 'hello'