在这种情况下,python的最佳实践是什么?函数内部或函数外部的迭代器

2024-04-24 22:24:19 发布

您现在位置:Python中文网/ 问答频道 /正文

如果我提到“状态机”这个词,大多数人都会支持状态机设计。所以我想把这个案子简化成重点。你知道吗

这里建议的是一个文本流,它很长或者经常被带到当前阶段。你知道吗

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

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

我需要一个顾问来告诉我哪种解决方案更有效。你知道吗


Tags: 方法if状态def解决方案processdosomething
1条回答
网友
1楼 · 发布于 2024-04-24 22:24:19

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

相关问题 更多 >