【发布时间】:2012-08-29 02:24:22
【问题描述】:
如果我提到“状态机”这个词,大多数人都会选择状态机设计。所以我想简化这个案例以专注于这一点。
这里建议是一个文本流,它很长或者经常被带到当前阶段。
每次我处理序列中的单个字符并决定下一个状态是什么时。这里有两种解决方案:
textflow = iter(text)
endFlag = False
while True:
process()
if endFlag:break
那么处理方法是这样的
def process0():
for x in textflow:
do something
if condition1:
process = process1
break
elif cond2:
process = process2
break
def process1():
for x in textflow:
do something
if cond0:
process = process0
break
elif cond2:
process = process2
break
...
或
for x in text:
process(x)
那么处理方法是这样的
def process0(x):
do something
if cond1:
process = process1
elif cond2:
process = process2
def process1(x):
do something
if cond0:
process = process0
elif cond2:
process = process2
....
在第一种解决方案中,每个流程方法都以自己的方式进行迭代,并结束流程,直到状态发生变化。其次,主循环进行迭代,每次都会调用进程。(可以使用map(),但由于每次都会更改进程,因此无济于事。)
状态变化是这样的:
0 1 2 1 0 2 1 0 1 2 0 1 2 0 ....
或者像这样:
0 0 0 0 0 ...many 0 .. 0 1 ...many 1 ... 1 2......2 1 ..... 1
更常见的情况是:
0 1 1 1 1 1 0 0 2 1 1 1 1 2 0 2 3 1 1 1 1 3 1 1 1 2 0 ....
我需要一位顾问来告诉我哪种解决方案更有效。
【问题讨论】:
-
您的第一个示例中的意思是
process(textflow)吗?还是process从周围的作用域中获取的? -
我不确定我是否理解我们应该关注哪些优化。在每个版本中都有相同数量的函数调用,唯一的区别是一个从全局变量中读取值,另一个获取作为参数传入的变量之一。他们都改变了全局变量
process,所以没有什么不同。我怀疑运行时间会相同。
标签: python function loops performance