-2

这似乎是一个非常简单的问题;但我看不出它实际上是如何可能的。我通常相当不错我的代码符合 PEP8。83 个字符是很好的类型。我有一个较长的列表(字典)理解与or我试图带到新行但我不知道如何进入or新行的理解相结合。

一个非常简化的版本是:

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

每当(无论在哪里)我尝试将其or 'hello'放在新行上,它都会惨遭失败;命令行解释器和 emacs 的解析器也不理解,所以它可能是不可能的。

是否有可能建立or 'hello'一条新线路,如果可以,它会去哪里?

4

3 回答 3

4

用括号括起来。这将起作用。

>>> test = {'a' : None, 'b' : None}
>>> b = (','.join([k for k in test if test[k]])
...      or 'hello')
于 2012-02-09T12:31:00.280 回答
2

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

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

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

于 2012-02-09T12:32:13.927 回答
2

您使用反斜杠显式标记行继续:

>>> test = {'a' : None, 'b' : None}
>>> b = ','.join([k for k in test if test[k]]) \
...          or 'hello'
于 2012-02-09T12:36:12.953 回答