Python的Dictionary的花括弧,應該換行嗎?

a = {"key0" : "val0",
"key1" : "val1",
"key2" : "val2"}

總感覺Python中,有一個行只有一個花括弧的話,有些突兀,感覺喪失了Python的美感。

a = {
"key0" : "val0",
"key1" : "val1",
"key2" : "val2"
}


建議參照 PEP 0008 -- Style Guide for Python Code。

PEP 8 中推薦了兩種代碼布局的縮進方式,雖然並不一定要遵守,但是個人認為是一種很優雅的規範。

如果第一個大括弧後不換行,則使用 vertical alignment,即:

a = {"key0": "val0",
"key1": "val1",
"key2": "val2"}

在長度不影響閱讀的情況下這種寫法也是允許的:

a = {"key0": "val0", "key1": "val1",
"key2": "val2", "key3": "val3",
"key4": "val4", "key5": "val5"}

注意這種情況下,每一行第一個非空白字元都要和第一行的括弧後的字元對齊,並且最後的括弧是不換行(直接跟在最後一個元素後面)的。

然後第一個大括弧後換行的寫法被稱作 hanging indent,即:

a = {
"key0": "val0",
"key1": "val1",
"key2": "val2"
}
a = {
"key0": "val0",
"key1": "val1",
"key2": "val2"
}

或是

a = {
"key0": "val0", "key1": "val1",
"key2": "val2", "key3": "val3",
"key4": "val4", "key5": "val5"
}
a = {
"key0": "val0", "key1": "val1",
"key2": "val2", "key3": "val3",
"key4": "val4", "key5": "val5"
}

這種情況下,內容的每一行都需要比第一行只多一層縮進(即4個空格),所以題主寫的第二種寫法「有些突兀,感覺喪失了Python的美感」其實是來自這裡。以及最後的括弧前必須換行,不過右括弧是否比第一行縮進是可選的

順便一提,最後一個元素後加上一個逗號也是一個可選項,單引號雙引號也都可以,只要保證自己的代碼風格始終統一就好了。

其它的列表、元組等定義也是類似的。定義函數略有不同,請參見前面發的 PEP 8 鏈接。

--------------------

可怕。。剛剛看了一眼問題日誌。。被修改之前的那些寫法簡直還要不忍直視。。


多行書寫的時候,建議換行更清晰一些。

此外,縮進應使用軟tab(即4個空格代替tab),賦值語句等號的左右要留且只留一個空格,冒號的右邊留一個空格,字元串統一使用單引號,如:

a = {
"key0": "val0",
"key1": "val1",
"key2": "val2"
}

--- 更正:瞄了眼之前寫的Python代碼,更新下縮進


單行少於80字元就前後都不要換行。確實需要多行書寫字典的時候,看心情要不要換行,如果換行,至少跟左大括弧對齊。


你出來,為什麼val2後面不加個逗號


對於有兩個以上的鍵值對的字典我都是要換行的,感覺這樣的代碼可讀性更強,而且很美觀!還有!!第二個字典的val2加個逗號更好吧!(輕微強迫症*罒▽罒*)


那兩種寫法都是異端,都太難看了,應該醬紫寫才對:

a = {
"key0" : "val0",
"key1" : "val1",
"key2" : "val2"
}


你這是在挑起戰爭,勿謂言之不預也


那要看你們團隊的代碼規範。。。

自己項目看心情。


有沒有聽過這個?

There are always two types of people. 233


應該


推薦閱讀:

一行 Python 能實現什麼喪心病狂的功能?
Python換行符問題:
還是

如何用Yacc實現一個Python的編譯器?
為什麼大多數編程語言被設計成函數只有一個返回值,而不是多個?
用 Python 做策略回測,耗時很長,有什麼加速辦法?

TAG:程序員 | Python | 編程 | 代碼風格 | 縮進 |