列表推导和换行的空格处理

-2 投票
3 回答
2365 浏览
提问于 2025-04-17 12:40

这个问题看起来很简单,但我就是搞不明白怎么做。我通常会让我的代码符合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')

撰写回答