0

バックグラウンド

コースに従って演習を行っているところです (興味がある人は FXPHD の pyt201 を参照してください)。構築しているものの 1 つは、フッテージのフレームを表すことを目的とした SequentialRange クラスです。簡単にするために、整数のフレーム番号を想定し、変なサブフレーム レンダリングはないと仮定します。

私が実装している方法の 1 つadd_frames(self, *frames)は、不特定多数の iterable を受け入れて追加する方法です。デモ コードは単純にこれを行います。

for frame in imap(int, chain(*frames)):
        self.add(frame)

そうしたいです..

...不正なシーケンス (たとえば、[1,2,"fish",6,7] など) を渡すと、結果の SequentialRange は醜い半処理状態の 1 つになるため、この動作は避けてください。 . これはセットなので、入力にパッチを当てて readd すると重複がスローされることはわかっていますが、 add_frames() 操作がよりバイナリになり、すべてのフレームを正常にロードできるように書きたいと思います。既存のセットを汚染しません。

思考プロセスは、基本的に、add_frame()必要な神秘的なブードゥー教を行う方法を用意することでした(現在はただself.add(int(the_input_frame_value))の方法です)。これは、ある意味で入力の健全性チェックを提供します。したがって、入力から一時的なセットを作成できます。それが成功した場合は、一時的なセットと元のセットの結合を行います。私が見つけている問題は、ユニオンが2つのセットのユニオンで構成されたコピーを返すことです。そのため、次のような手段に頼る必要があります。

temporary_set = SequentialRange()
try:
    for frame in itertools.chain(*frames):
        temporary_set.add_frame(frame)
except ValueError:
    # placeholder flameout message
    print("malformed input, no changes made")
    return
except:
    raise

for x in temporary_set:
    self.add_frame(x)

それは動作しますが...

...セット全体を繰り返すことが良い考えであるとは確信が持てません。それは感じます、えーと..間違っていますか?主に、サニティチェックのために入力を1回繰り返したので、追加フェーズを繰り返す必要はないと思います。

はい、私が間違っていることについて何か提案はありますか?これを簡単にする何かが欠けているという感覚を揺るがすことはできませんが、同時に、これはまったくの学習のためであるため、問題への別のアプローチも歓迎されます..

4

0 に答える 0