看板 Python 關於我們 聯絡資訊
大家好,假設我的畫面上有一個按鈕,想讓使用者在點擊時依序且循環執行不同的 函數,例如我有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)() 請問除此之外,還有更簡潔的寫法嗎? -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 111.250.100.124 ※ 文章網址: https://www.ptt.cc/bbs/Python/M.1527864022.A.6E1.html
TitanEric: 可以考慮用itertools的cycle function 06/01 23:00
Cycle好像是一直重複跑不會停下來耶
tlaceruse: 可以增加一個變數一直累加,利用餘數判斷執行哪個func 06/01 23:37
這就是方法一的做法呀
tlaceruse: tion 06/01 23:37
※ 編輯: icetofux (111.250.100.124), 06/02/2018 00:52:21 ※ 編輯: icetofux (111.250.100.124), 06/02/2018 00:56:11
ThxThx: 一樓的cycle就是替代你的cycleFunc 06/02 03:08
了解,我記成itertools.cycle()的功能了,1樓對不起。
ThxThx: generator = cycle((funcA, funcB, funcC)) 06/02 03:09
※ 編輯: icetofux (111.250.100.124), 06/02/2018 07:44:58