2016-03-08 37 views
0

使用的79字符長,怎麼會有人制訂一個命令,例如:pep8符合long json字典查找?

return method_returning_json()['LongFieldGroup1']['FieldGroup2']['FieldGroup3']['LongValue'] 

如果我移動查找到下一行,如:

return method_returning_json()\ 
    ['FieldGroup1']['FieldGroup2']['FieldGroup3']['Value'] 

PEP8抱怨「空間之前[「,因爲有幾個選項卡。但是,如果我將第二/第三/ etc組移至換行符,它會執行相同的操作。

我知道我可以將# noqa標記添加到行尾,但我希望有更好的方法。

+1

可能要打破查找,以中間變量('O1 = method_returning_json()[ 'FieldGroup1']'和'O2 = O1 [ 'FieldGroup2'] [ 'FieldGroup3'] [ '值']',舉個例子)。如果'o1'和'o2'可以具有有意義的名稱並且充當數據的註釋,那麼它會最好。除此之外,你可以做的不多。 –

+1

我也不會對PEP8感到迷戀。這是一個很好的指南,我很高興大多數Python開發人員大多數時間都遵循它,但IMO建議在方法調用後帶反斜槓的版本非常易讀,只要不存在許多'['組 '] [' 的 '] [' 方 '] [' 括號]'。 IMO的'pep8'工具抱怨不一定足以改變你的代碼。如果它確實提高了可讀性,請稍微靈活一些。 – Chris

+0

除了標準庫本身和文檔字符串外,我認爲大多數人認爲大約100個字符的行長是合理的。也就是說,無論您選擇哪個閾值,都應該嘗試馴服極端的異常值。 – chepner

回答

2

使用隱式續行:

return (method_returning_json() 
      ['LongFieldGroup1'] 
      ['FieldGroup2'] 
      ['FieldGroup3'] 
      ['LongValue']) 

(您可能需要調整的實際缺口,使pep8工具快樂。)

你甚至可以使用索引括號自己允許隱式行繼續,儘管我沒有發現任何特別可讀的變體。

# Legal, but probably not desirable. 
# At the very least, pick one style and be consistent; don't 
# use a variety of options like I show here. 
return method_returning_json()[ 
     'LongFieldGroup1'][ 
     'FieldGroup2'][ 
     'FieldGroup3' 
     ][ 
     'LongValue' 
     ] 
+0

第一種方式完美。 – enderland

+0

第一種方式非常棒。第二種方式太恐怖了! – reynoldsnlp

1

報價PEP8

愚蠢的一致性是小小的心靈

一個圭多的主要見解的妖怪是代碼讀取更經常比被寫入。這裏提供的準則旨在提高代碼的可讀性並使其在各種Python代碼中保持一致。正如PEP 20所說,「可讀性計數」。

風格指南是關於一致性的。與此風格指南的一致性非常重要。項目中的一致性更重要。一個模塊或功能內的一致性是最重要的。

但是,知道什麼時候不一致 - 有時風格指南建議不適用。如有疑問,請使用您的最佳判斷。看看其他例子,並決定什麼看起來最好。不要猶豫,問!

特別是:不要爲了符合PEP而打破向後兼容性!

其他一些很好的理由忽略特定準則:

當應用指導原則會使代碼的可讀性,甚至有人誰是用來閱讀下面這個PEP代碼。

爲了與周圍的代碼保持一致(也許是出於歷史原因) - 雖然這也是一個清理別人亂七八糟(真正的XP風格)的機會。

因爲有問題的代碼早於指南的引入,所以沒有其他理由要修改該代碼。

當代碼需要與不支持樣式指南推薦的功能的較舊版本的Python保持兼容時。

在我看來(和它只是一個意見)有次如你在破線使代碼難於閱讀,所以這可能是一個合理的時間忽略該行長度的方針。

說了這麼多,如果你真的想保持線路長度79下,一個 方式可能會被實際分割的命令分成幾行:

some_json = method_returning_json() 
key1 = 'FieldGroup1' 
key2 = 'FieldGroup2' 
key3 = 'FieldGroup3' 
return some_json[key1][key2][key3]['Value'] 

這是不是單線的簡潔方法,但每一行都較短。對你來說,哪個更小的罪惡就是判斷。即括號內發生