「ステート マシン」という言葉に言及すると、ほとんどの人はステート マシンの設計に行きます。ですから、要点に焦点を当てるためにケースを単純化したいと思います。
ここで提案されているのはテキスト フローです。非常に長いか、現在の段階に頻繁に持ち込まれます。
シーケンスから 1 文字を処理するたびに、次の状態を決定します。以下に 2 つの解決策を示します。
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
....
最初のソリューションでは、各プロセス メソッドが独自の方法で反復を行い、状態が変更されるまでプロセスを終了します。2 番目の例では、メイン ループが反復を実行し、そのたびにプロセスが呼び出されます (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 ....
どちらのソリューションがより効率的かを教えてくれるアドバイザーが必要です。