Re: [問題] 怎麼用 Python 寫出 switch 的功能?

看板Python作者 (ccccccc)時間7年前 (2017/10/19 09:19), 編輯推噓2(201)
留言3則, 3人參與, 7年前最新討論串5/11 (看更多)
不知道這樣有符合嗎? # predefined init process def init1(): print 'init1' def init2(): print 'init2' def init3(): print 'init3' # mimic the switch fallthrough def switch(c): func_cases = { 'case1': [init1, init2], 'case2': [init1, init3] } for f in func_cases[c]: f() # run your switch-case switch('case1') ※ 引述《henry8168 (番薯猴)》之銘言: : 大家好。 : 很多人都說 if else 已經很夠用了,不需要 switch, : 但 C 語言的 switch 有一個特點就是,如果每個 case 不加上 break, : 就能夠繼續執行下方其他 case 的行為。 : 尤其寫 kernel module 的人, : 應該常常會需要在 initial 階段控管初始化失敗時的狀況。 : 打個比方,很多開發者都會很喜歡用 goto。 : int init_phase(){ : char* errfunc = "functionNameHere"; : if(init_process1() < 0){ : errfunc = "init_process1"; : goto fail_p1; : } : if(init_process2() < 0){ : errfunc = "init_process2"; : goto fail_p2; : } : if(init_process3() < 0){ : errfunc = "init_process3"; : goto fail_p3; : } : return 0; : init_process3: : release_process2(); : init_process2: : release_process1(); : init_process1: : printf("%s: initial failed.\n",errfunc); : return -1; : } : 但不愛用 goto 的我就會改成以下: : int init_phase(){ : char* errfunc = "functionNameHere"; : int errOccur = 0; : if(!errOccur){ : if(init_process1() < 0){ : errfunc = "init_process1"; : errOccur = 1; : } : } : if(!errOccur){ : if(init_process2() < 0){ : errfunc = "init_process2"; : errOccur = 1; : } : } : if(!errOccur){ : if(init_process3() < 0){ : errfunc = "init_process3"; : errOccur = 1; : } : } : if(!errOccur) : return 0; : switch(errfunc){ : case "init_process3": : release_process2(); : case "init_process2": : release_process1(); : case "init_process1": : printf("%s: initial failed.\n",errfunc); : } : return -1; : } : 抱歉,在 Python 板打這麼多 C 語言 @@" : 不過我想表達的就如同上述,請問 Python 該怎麼做到類似的功能呢? : 我正在改一位同仁的 Python,想運用類似 switch 的特點完成。 : 查到很多人都說可以用 dict,卻還是一頭霧水。 : 謝謝。 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 61.221.35.72 ※ 文章網址: https://www.ptt.cc/bbs/Python/M.1508404779.A.7A1.html

10/19 17:34, 7年前 , 1F
for loop要縮排 貼上去亂了
10/19 17:34, 1F

10/19 20:24, 7年前 , 2F
看下來 這版本好像最簡單易懂
10/19 20:24, 2F

10/20 09:56, 7年前 , 3F
可是這個沒有倒車 release 的部份啊 o_o"
10/20 09:56, 3F
文章代碼(AID): #1Pw6uhUX (Python)
討論串 (同標題文章)
本文引述了以下文章的的內容:
以下文章回應了本文
完整討論串 (本文為第 5 之 11 篇):
文章代碼(AID): #1Pw6uhUX (Python)