作者icetofux ()
看板Python
標題[討論] 循環執行N個函式的寫法
時間Fri Jun 1 22:40:19 2018
大家好,假設我的畫面上有一個按鈕,想讓使用者在點擊時依序且循環執行不同的
函數,例如我有func
A()、func
B()及func
C():
第1次點擊執行func
A()
第2次點擊執行func
B()
第3次點擊執行func
C()
第4次點擊執行func
A()
第5次點擊執行func
B()
第6次點擊執行func
C()
第7次點擊執行func
A()
...
目前我能想到的實現方案有兩種
第一種產生比較多的物件,且每次都要重新進行累加及模數運算:
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