在这种情况下哪个是python的更好的做法?函数内部或外部函数的迭代器

时间:2012-08-29 02:24:22

标签: python function loops performance

如果我提到'国家机器'这个词,大多数人会选择国家机器设计。所以我想简化案例,重点关注这一点。

这里建议的是文本流程,它很长或者经常被带到现阶段。

每次我处理序列中的单个字符并确定下一个状态是什么。这有两个解决方案:

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 ....

我需要一位顾问告诉我哪种解决方案更有效率。

1 个答案:

答案 0 :(得分:0)

它主要取决于您要处理的项目数,因为函数调用很昂贵。如果你有大量的项目,那么在函数中嵌入循环是更好的选择。如果它只会迭代几个项目,我通常会选择表达意图最清楚的那个。