※ 引述《henry8168 (番薯猴)》之銘言:
: 大家好。
: 很多人都說 if else 已經很夠用了,不需要 switch,
: 但 C 語言的 switch 有一個特點就是,如果每個 case 不加上 break,
: 就能夠繼續執行下方其他 case 的行為。
我比較常用 return, 會像底下這樣寫:
----
def init_phase():
releasers = []
def error(msg, releasers):
print( msg + ": initial failed.\n" )
while releasers:
(releasers.pop())()
return -1
if init_process1() < 0:
return error("init_process1", releasers)
releasers.append(release_process1)
if init_process2() < 0:
return error("init_process2", releasers)
releasers.append(release_process2)
if init_process3() < 0:
return error("init_process3", releasers)
releasers.append(None) # 'None' is safe because no error() hereafter
# replace None if there is release_process3()
print("initialization succeeded !!")
return 0
====
因為要先放 release_xxx 進 releasers, 會有一些 overhead.
如果有更多層的init_xxx, 也可以考慮再用 array(init_xxx, release_xxx, msg_xxx)
+ for + zip 包起來.
for i, m, r in zip(init_xxx, msg_xxx, release_xxx):
if i() < 0:
return error(m, releasers)
releasers.append(r)
return 0;
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 36.228.228.54
※ 文章網址: https://www.ptt.cc/bbs/Python/M.1508431668.A.61F.html
※ 編輯: edwar (36.228.228.54), 10/20/2017 00:49:23