※ 引述《kenduest (小州)》之銘言:
: ※ 引述《henry8168 (番薯猴)》之銘言:
: :     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,卻還是一頭霧水。
: : 謝謝。
:   類似這個方式嗎?
:   entry = { "init_process3": release_process2,
:             "init_process2": release_process1,
:             "init_process2": initial_fail,
:           }
:   handler = entry.get(errfunc)
:   if handler:
:       handler()
:   return -1
修改後,有保證順序。
from collections import OrderedDict
entry = OrderedDict()
entry["init_process3"] = release_process2
entry["init_process2"] = release_process1
entry["init_process1"] = initial_fail
keys = list(iter(entry))
if errfunc not in entry:
    return -1
start = keys.index(errfunc)
for i in range(start, len(keys)):
    entry.get(keys[i])()
我對op的理解是滿足某個條件後執行一系列commad
command的順序是"固定",
條件的存在是為了找出從哪個command開始做。
因此,也可以是:
commands = [release_process2, release_process1, "break", initial_fail]
cases = {"initial_process3": 0,
         "initial_process2": 1}
try:
    start = cases[errfunc]
except KeyError:
    return -1
else:
    for command in commands[start:]:
        try:
            command()
        except TypeError:
            break
然後可以再包成class或function,變形可以有很多種。