2012-02-09 61 views
-3

這似乎是一個非常簡單的問題;但我看不出它是如何實際可能的。我通常相當不錯,我的代碼符合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'放在一個新的行,如果是的話它會去哪裏?

編輯我開始覺得有點傻......顯然,我忘了所有的Python語法....

+0

可能是一個副本: [堆棧溢出 - 怎樣才能讓下80個字符的行我Python代碼STAY] [1] [1]:http://stackoverflow.com/questions/2070684/how-can-i -make-my-python-code-stay-under-80-characters-a-line – yan 2012-02-09 12:53:24

+1

「顯然我忘記了所有的python語法」。請收藏以下鏈接。 http://docs.python.org/reference/lexical_analysis.html#line-structure – 2012-02-09 13:27:15

回答

4

括號括起來。這將工作。

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

我已經編輯了您的答案以匹配OP的實際問題。 – 2012-02-09 12:46:22

+0

@TimPietzcker謝謝! – 2012-02-09 12:47:41

2

如果一行過長,將它分成幾個語句,以提高可讀性:(我也改變了列表解析到一個更合適的發電機表達式)

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

+0

我很樂意將它寫入新的聲明中,但我將其加入到另一個值中,我寧願不這樣做兩次,因爲它會降低可讀性;但是你爲發電機提示。 – Ben 2012-02-09 12:39:56

2

你用反斜槓明確標出行的延續:

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