作者Philethan (Ethan)
看板Python
標題[問題] 如何將 code 寫得很美麗通順且直觀?
時間Mon Apr 22 22:57:08 2019
大家好,小弟是經常需要用到 python 做各種數值積分的碩二生。
過去一年來,平均每週大概花個十幾小時在寫程式,但日子一久,
我並不見得會記得當時我的「邏輯」是什麼。即便自己加了註解,
我也不見得看得懂,更別說其實自己也不是很有耐心在寫註解...。
雖然小弟沒特別學過什麼程式,只修過理工學院的 Matlab、fortran、
C++,然後去年才開始用 Python,只知道常見的基本功能而已,但
確實會想把 code 寫好,所以才想上來問問各位大神,不知道各位
寫程式有沒有什麼技巧或心法之類的?
小弟通常都是用程式讀取 *.csv,將多組 (x,y) 座標數據進行積分、
微分、疊合平均,去除不想做曲線擬合的數據,將數據平移,儲存
csv、換單位 ...。這些動作,日子一久,回過頭來看就會忘記 = ="
例如:
https://paste.ofcode.org/38jmDgr9m66wJiYEMdpZvfu
有時也會一直猶豫要不要將一些動作寫為 function。一開始覺得不要,
但重複第二次時才發現天啊,早知道就寫成 function。但寫 function
有時又會比較複雜,要輸入的參數、數據太多,似乎也不適合寫成函數。
不過我常用的函數都會寫在一個外部檔案中,需要時就 import 進來用。
或許這種事情就只能靠自己耐煩,慢慢整理嗎?.....
不好意思,或許有點不知所云 <(__)> 謝謝大大們的閱讀。
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 123.192.0.245
※ 文章網址: https://webptt.com/m.aspx?n=bbs/Python/M.1555945031.A.F40.html
※ 編輯: Philethan (123.192.0.245), 04/22/2019 22:58:15
1F:推 vi000246: 關鍵字 clean code、重構 04/22 23:04
2F:推 iphone2003: 提個不相關的,其實沒必要寫reverselist這個函數,直 04/22 23:19
3F:→ iphone2003: 接my_list[::-1]就可以得到reverse了 04/22 23:19
4F:推 TitanEric: 多看多寫就慢慢學會 04/22 23:28
5F:→ jiyu520: 其實code很難一次到簡潔或是不重複 04/23 00:00
6F:→ jiyu520: 當發現自己一直在重複寫類似的code,就是抽出的好時機了 04/23 00:01
7F:→ jiyu520: 命名、架構、迴圈層數、路徑規劃、單一職責、開放封閉 04/23 00:03
8F:→ jiyu520: 讓程式碼具有「良好可讀性、可維護性」 04/23 00:05
9F:→ jiyu520: 到「效率性、健全性」,都是重購的好處 04/23 00:06
10F:→ jiyu520: 推薦 易讀程式之美學、無暇的程式碼 04/23 00:08
11F:推 jiyu520: 對重要代碼寫測試、設計模式的使用也都有幫助 04/23 00:23
12F:推 jiyu520: 函數可能是純工具(職責較單純)、或是腳本式(呼叫各函數 04/23 00:28
13F:→ jiyu520: 你提到 數據太多-> 要處理步驟可能也多 -> 抽步驟成func 04/23 00:29
14F:→ jiyu520: 這樣把函式切為 主腳本函式-> 吃參數、call各函式、結果 04/23 00:31
15F:→ jiyu520: 各步驟函式 -> 資料讀、清、運、儲 04/23 00:32
17F:→ flarehunter: Google python style guide 04/23 08:19
18F:→ feeya: 自己建一個library 例如ez.func1 ez.func2 04/23 13:05
19F:→ feeya: 把你自己寫個function整理在裡面 04/23 13:05
20F:→ f496328mm: 適當的重構 另外開始學會用物件 04/23 13:46
21F:→ f496328mm: 例如某件事,你要用到很多func,就用class包起來 04/23 13:47
22F:→ f496328mm: class 中加入 main,這樣你就不會有 func 太多問題 04/23 13:47
23F:→ f496328mm: class還有一個好處,你參數、data不用傳來傳去 04/23 13:48
24F:→ f496328mm: 另外物件可以減少很多code 04/23 13:51
哇 感謝大家的留言幫忙,受益良多。
小弟有查查 clean code 與重構,有看到非常多想法 :)
另外我也不太會用 class,之後會來試試看用 class!也很感謝 jiyu520 大大的
很多建議,接下來光是消化大家給的建議就可以提升超多實力了,感謝!
※ 編輯: Philethan (140.112.4.206), 04/23/2019 15:23:02
25F:推 numpy: 很多編輯器都有pylint可以裝,可以讓你知道那些地方可以寫 04/24 18:56
26F:→ numpy: 更好 04/24 18:56
27F:→ numpy: *哪 04/24 18:57