Re: [討論] Python 3.10將加入Switch-Case語句
※ 引述《ohmylove347 (米特巴爾)》之銘言:
: https://reurl.cc/8yzA24
: 上面說2006年 PEP 3103就建議實施switch-case語句。
: 但是,在PyCon 2007上的一項民意調查未獲得對該功能的支持後,
: Python開發人員將其刪除。
:
: 沒有使用Python不知道生態系如何
: Google App上看到的文章
: 不知道各位大大對Switch加入有什麼看法
:
: 推 Muscovy: for/while 比 if-else 常出現無誤, 大概 10:1 的比例. XD
: 推 TAMSHUI: 不知M大能否舉例完全不用if-else呢?Google了一下還是沒
: → TAMSHUI: 什麼想法@@
: 推 Muscovy: 不會到完全不寫 if 的程度啦,等一下我來整理一篇
我的工作環境很雜, 從 matlab 到 C 與他的親朋好友(java 也算. :D)
反正猴子用 C, 有錢的猴子用 matlab, 沒錢的猴子像我就用 python.
但是大概都會雙棲...
我來舉個例子...
譬如你有一組數字, 數量不多不少, 大約 10,000 個左右.
然後要處理它, 先叫他 eigen_spectrum, 或者簡稱 eig 好了.
當 eigen_spectrum >= 100,000,000 的時候要做一堆事.
介於 [10, 100,000,000) 的時候又一堆事.
介於 (0, 10) 的時候又一堆.
剛好等於 0 的時候需要處理特殊事件.
然後小於 0 的話要檢查有沒有奇怪的現象, 標注一些警示.
這些事情的執行細節通通都不太一樣, 然後要怎麼做?
用 C 的話, 大概 if-else/if-else/if-...-else 之外就沒招了.
所以 python by C programmer 會變這樣:
for s in eigen_spectrum:
if s >= 1e8:
pass # 這裡寫一大坨, 頂多寫個函數處理.
elif s >= 10 and s < 1e8:
pass # 這裡再一坨, 或者寫個跟上面不一樣函數.
elif s > 0 and s < 10:
pass # 再一坨, 或者再一個跟上面都不同的函數.
elif s == 0:
pass # 嗯, 你知道的, 繼續.
elif s < 0:
pass # 嗯......寫就對了.
else:
raise ValueError("Should not happen.")
最後你會得到一堆只用一次的函數, 或者一大串超長程式碼.
但是 python programmer 呢, 會這樣寫:
for s in eig[eig > 1e8]:
pass # 寫寫寫, 也是一大坨.
for s in eig[np.logical_and(eig > 10, eig < 1e8)]:
pass # 繼續寫寫寫, 也是一坨.
for s in eig[np.logical_and(eig > 0, eig < 10)]:
pass # 再寫, 繼續就對了.
if np.any(eig == 0):
pass # 驚醒! 想一下遇上 0 的時候要做什麼.
for s in eig[eig < 0]:
pass # 再寫再寫, 反正就是接龍.
很有趣的結構吧? 你還是會變出一段超長程式碼.
再加上明明一個迴圈可以搞定的事, 硬要拆成四個.
還補了一個莫名其妙, 不太對稱的 if.
但事實上這種寫法比較好維護, 因為這個結構更近似數學的模型.
可以往前翻到我上面的文字敘述, 比看看兩種寫法就知道了.
這個數學模型很簡單, 然而不同的寫法就已經有風格上的區分.
稍微複雜一點的數學模型, 用 if-elif-else 就更難重建.
譬如這個 eigen_spectrum 會有一組伴隨的 eigen_states 要處理.
用 if-else 硬爬會爬出一堆腦袋打結的程式碼, 因為很不像數學.
然後結構裡面的 if 其實是用來做 s == 0, exception handle.
而且這也是我最常遭遇的情境: 用 if + raise 來表示異常狀況.
其他時候, 我一下子想不太到寫 if statement 的情況.
因為翻到的程式碼幾乎都是:
if np.count_nonzero(np.abs(s) < 1e-8) > 2:
raise ValueError('Too many singularities.')
這一類的東西, 它就是有個 raise.
: → as30385438: 不用if就是用loop、dict的key放condition或一些DP手法
: → as30385438: 寫python的常常追求所謂的pythonic,不過我自己是覺得
: → as30385438: simple is best,最直覺的寫法通常就是最好的
從 stackoverflow 容易學到的毛病就是把 one-liner 當成 pythonian.
養成這種習慣的程式員有夠難矯正.
--
新詩練習:新鮮。踩破初春裡的狗大便;不經意的滄桑,滿溢著嫩黃的喜悅。
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 111.248.47.50 (臺灣)
※ 文章網址: https://www.ptt.cc/bbs/Soft_Job/M.1616832576.A.DCB.html
→
03/27 16:19,
4年前
, 1F
03/27 16:19, 1F
→
03/27 16:19,
4年前
, 2F
03/27 16:19, 2F
→
03/27 16:21,
4年前
, 3F
03/27 16:21, 3F
推
03/27 18:24,
4年前
, 4F
03/27 18:24, 4F
→
03/27 18:33,
4年前
, 5F
03/27 18:33, 5F
→
03/27 18:51,
4年前
, 6F
03/27 18:51, 6F
→
03/27 18:54,
4年前
, 7F
03/27 18:54, 7F
推
03/27 19:11,
4年前
, 8F
03/27 19:11, 8F
推
03/27 19:29,
4年前
, 9F
03/27 19:29, 9F
→
03/27 19:29,
4年前
, 10F
03/27 19:29, 10F
→
03/27 19:32,
4年前
, 11F
03/27 19:32, 11F
→
03/27 19:39,
4年前
, 12F
03/27 19:39, 12F
→
03/27 19:39,
4年前
, 13F
03/27 19:39, 13F
推
03/27 20:31,
4年前
, 14F
03/27 20:31, 14F
→
03/27 20:31,
4年前
, 15F
03/27 20:31, 15F
→
03/27 20:35,
4年前
, 16F
03/27 20:35, 16F
推
03/27 20:40,
4年前
, 17F
03/27 20:40, 17F
推
03/27 20:46,
4年前
, 18F
03/27 20:46, 18F
→
03/27 20:48,
4年前
, 19F
03/27 20:48, 19F
推
03/27 21:04,
4年前
, 20F
03/27 21:04, 20F
→
03/27 21:05,
4年前
, 21F
03/27 21:05, 21F
→
03/27 21:06,
4年前
, 22F
03/27 21:06, 22F
→
03/27 21:07,
4年前
, 23F
03/27 21:07, 23F
→
03/27 21:07,
4年前
, 24F
03/27 21:07, 24F
→
03/27 21:10,
4年前
, 25F
03/27 21:10, 25F
→
03/27 21:22,
4年前
, 26F
03/27 21:22, 26F
→
03/27 21:51,
4年前
, 27F
03/27 21:51, 27F
→
03/27 21:53,
4年前
, 28F
03/27 21:53, 28F
→
03/27 21:58,
4年前
, 29F
03/27 21:58, 29F
→
03/27 22:00,
4年前
, 30F
03/27 22:00, 30F
推
03/27 22:02,
4年前
, 31F
03/27 22:02, 31F
→
03/27 22:03,
4年前
, 32F
03/27 22:03, 32F
→
03/27 22:04,
4年前
, 33F
03/27 22:04, 33F
推
03/27 22:09,
4年前
, 34F
03/27 22:09, 34F
推
03/27 22:22,
4年前
, 35F
03/27 22:22, 35F
推
03/27 23:16,
4年前
, 36F
03/27 23:16, 36F
→
03/29 12:38,
4年前
, 37F
03/29 12:38, 37F
→
03/29 12:41,
4年前
, 38F
03/29 12:41, 38F
→
03/29 12:41,
4年前
, 39F
03/29 12:41, 39F
推
03/30 17:14,
4年前
, 40F
03/30 17:14, 40F
→
03/30 17:14,
4年前
, 41F
03/30 17:14, 41F
討論串 (同標題文章)
以下文章回應了本文:
完整討論串 (本文為第 2 之 6 篇):
Soft_Job 近期熱門文章
18
31
26
104
PTT職涯區 即時熱門文章
25
39