列表推导和换行的空格处理
这个问题看起来很简单,但我就是搞不明白怎么做。我通常会让我的代码符合PEP8规范,83个字符的长度是可以接受的。不过,我有一个比较长的列表(字典)推导式,里面用到了or
,我想把or
放到新的一行,但我不知道怎么把or
放到新行上。
一个简化的例子是:
>>> test = {'a' : None, 'b' : None}
>>> b = ','.join([k for k in test
... if test[k]]) or 'hello'
每当我尝试把or 'hello'
放到新的一行时,它总是失败;命令行解释器和emacs的解析器也不理解,所以这可能是不可能的。
那么,能不能把or 'hello'
放到新的一行上,如果可以的话,它应该放在哪里呢?
3 个回答
2
你可以用反斜杠来明确表示代码的继续行:
>>> test = {'a' : None, 'b' : None}
>>> b = ','.join([k for k in test if test[k]]) \
... or 'hello'
2
如果一行代码太长了,可以把它拆分成几行,这样更容易看懂:
b = ','.join(k for k in test if test[k])
if not b:
b = 'hello'
(我还把列表推导式改成了更合适的生成器表达式。)
4
把它放在括号里。这样就可以了。
>>> test = {'a' : None, 'b' : None}
>>> b = (','.join([k for k in test if test[k]])
... or 'hello')