2014-07-22 30 views
1

我已經開始嚴格遵循PEP-8,因爲我認爲我應該至少在嘗試選擇我喜歡的東西之前嘗試它。我應該用camelCase來遵守pep-8的線長嗎?

但是,似乎有衝突。他們強烈建議將每行限制爲79個字符,但他們強烈建議使用方法和變量名use_underscores_between_words。

在一個典型的線,你嵌套在

class -> 
    method -> 
     loop -> 
      conditional -> 
       my_var_name += do_some_function(some_parameter, another_parameter) 

,你已經有79 - 16 = 63個字符的工作,而你對剛纔強調了浪費6。所以上面的這條線太長了,實際上很短。

如果我不得不經常對字符進行計數,或者將這樣的基本線條分成幾行,似乎生產力會受到影響。

我知道現在它說「如果你的團隊同意,使用99」,但看起來這應該是標準,或者說camelCaseVars應該是標準,因爲我們非常喜歡短線。

我與編碼符合標準的Python的問題是,我似乎無法編寫任何代碼而沒有使用神祕名稱,或違反了行長或命名約定。我可以在這裏發佈我的代碼,向您展示我的具體問題,但上面的示例代表了我使用代碼處理的問題。

哪個理想不太重要?清除名稱,簡短行或using_underscores?

UPDATE:雖然沒有人真正提出這個問題,但我感覺使用較少的描述/函數和變量名實際上是默認問我的。我知道人們會說「當然不是,只是包裝你的線」,但實際上,它似乎是「使用非常短名稱」和「包線」的混合物,但堅持80.

我認爲這就是人們所做的事情,但我認爲在生產力爲王的業務項目層面上,團隊剛剛拋出了這個規則,並跳到了120。現在,我認爲我會堅持79(大量)(imh​​o)醜陋的線條包裹着,並且覺得我能夠在一個小型監視器上並排查看2個文件。

+2

也許這個問題會更適合[Programmers.SE](http://programmers.stackexchange.com/),因爲它並沒有真正處理特定的代碼,而是使用編程和編碼技術的原理。從該網站的關於頁面:'「程序員堆棧交換是專業程序員對軟件開發概念性問題感興趣的問答網站。」我覺得你的「絕對是一個概念性問題」。 – Lix

+2

我不明白* 6 *字符是如何產生問題的。大多數情況下,使用駱駝的情況下*不會*使線條適合,所以你不得不拆分線。我真的沒有看到問題。 – Bakuriu

+1

爲什麼在多行分裂函數調用不可取?我有時會與我自己辯論如何優雅和慣用地分開,但我基本上不需要超越第80列。 – tripleee

回答

2

Python Zen說:

扁平比嵌套要好。

因此,考慮通過代碼分解減少代碼的嵌套 - 通過將某些部分提取到單獨的方法或函數中,使代碼更少嵌套。你的編輯器裏總是有足夠的水平空間。

更新

對於條件還可以減少由分解嵌套層次的嵌套循環。

例如,你可以在此更改代碼:

class MyClass(BaseClass): 

    def my_method(): 
     for item in self.my_collection: 
      if item.numeric_property % 2: 
       self.my_property = item.other_property + item.age * self.my_coefficient 
     self.do_other_stuff() 

這一個:

class MyClass(BaseClass): 

    def my_method(): 
     """People see what happen because of clear names""" 
     self.process_my_collection() 
     self.do_other_stuff() 

    def process_my_collection(): 
     """People see what happen because of clear names. 
     They probably don't even need to read your math from 
     process_my_collection_item(item) at all. 
     And you make the code more flat as well. 
     """ 
     for item in self.my_collection: 
      self.process_my_collection_item(item) 

    def process_my_collection_item(item): 
     """The most people don't need to read these calculations every time 
     since they just know it's working and tested 
     but they'd like to work with methods above frequently: 
     """ 
     if not item.numeric_property % 2: 
      return 
     self.my_property = item.other_property + item.age * self.my_coefficient 

正如你可以看到我分了一個方法來幾個簡單的操作,並使其少嵌套。

+0

這是一個很好的觀點。我試圖在我的例子中是典型的。我的意思是類 - >方法 - >循環級別是不可避免的,但我認爲一個條件可以變成一個簡單的函數。看起來性能可能會受損,因爲即使在重構和添加兩個新函數之後,這些仍然是內部循環 – AwokeKnowing

+0

,仍然是79個字符!哦,我猜如果有很多圖書館是這樣寫的,那一定是可以的。儘管如此,我仍然覺得隱晦的名字是常態。 – AwokeKnowing

1

你的目標應該是編寫易於理解的代碼。

一般來說,堅持PEP8讓你更接近這個目標。如果您的代碼和/或您的團隊的性質使得camelcase運行得更好,那麼務必使用camelcase。這就是說,如果你認爲它是重要的節省六個字符,你認爲是一個典型的線,也許這是告訴你,你的典型線嵌套得太深了,有一個更好的解決辦法,比改變命名約定。

+0

好吧,我只是覺得也許我是新人,每個人都在嘲笑我實際上試圖按照手冊,或者我可能錯過了其他的東西 – AwokeKnowing

+0

+1。就我個人而言,我認爲一些PEP8的建議(比如80個字符的限制)是不好的,或者最多隻是延續不必要的約定。 – BrenBarn

+0

我對80個字符的限制是100是一個更實際的限制,但是我不知道我是否曾經看到代碼被卡住了80個字符的限制,我認爲「gee,如果線條更長「。 80個字符的限制意味着您不得不回答「這一行太長」的問題,而不是如果您有更大的限制,但這不一定是壞事。 –

1

使用下劃線,這是每個人都期待的。

但是,79個字符的限制是更容易提出的建議之一。我的團隊使用具有119個字符行的pep8,但我們絕大多數行的字符總共不超過80個字符。

+0

這將是我的猜測。雖然我對camelCase很滿意,但我遵循這樣的慣例很好,但它似乎與79個字符的非常強大的慣例相沖突。 – AwokeKnowing