作者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://webptt.com/cn.aspx?n=bbs/Python/M.1527864022.A.6E1.html
1F:推 TitanEric: 可以考虑用itertools的cycle function 06/01 23:00
Cycle好像是一直重复跑不会停下来耶
2F:推 tlaceruse: 可以增加一个变数一直累加,利用余数判断执行哪个func 06/01 23:37
这就是方法一的做法呀
3F:→ 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
4F:推 ThxThx: 一楼的cycle就是替代你的cycleFunc 06/02 03:08
了解,我记成itertools.cycle()的功能了,1楼对不起。
5F:→ ThxThx: generator = cycle((funcA, funcB, funcC)) 06/02 03:09
※ 编辑: icetofux (111.250.100.124), 06/02/2018 07:44:58