[讨论] 循环执行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