[討論] 循環執行N個函式的寫法

作者: icetofux   2018-06-01 22:40:19
大家好,假設我的畫面上有一個按鈕,想讓使用者在點擊時依序且循環執行不同的
函數,例如我有funcA()、funcB()及funcC():
第1次點擊執行funcA()
第2次點擊執行funcB()
第3次點擊執行funcC()
第4次點擊執行funcA()
第5次點擊執行funcB()
第6次點擊執行funcC()
第7次點擊執行funcA()
...
目前我能想到的實現方案有兩種
第一種產生比較多的物件,且每次都要重新進行累加及模數運算:
func_list = [funcA, funcB, funcC]
index = 0
def onClick():
func_list[index%len(func_list)]()
index = index + 1
第二種產生的物件及運算應該比較少,但相對code比較長:
generator = cycleFunc()
def cycleFunc():
while True:
yield funcA
yield funcB
yield funcC
def onClick():
next(generator)()
請問除此之外,還有更簡潔的寫法嗎?
作者: TitanEric (泰坦)   2018-06-01 23:00:00
可以考慮用itertools的cycle function
作者: tlaceruse   2018-06-01 23:37:00
可以增加一個變數一直累加,利用餘數判斷執行哪個function
作者: ThxThx (洗洗睡)   2018-06-02 03:08:00
一樓的cycle就是替代你的cycleFuncgenerator = cycle((funcA, funcB, funcC))

Links booklink

Contact Us: admin [ a t ] ucptt.com