Python で dict か generator を引数に取る関数の例 ― 2024年04月03日 13時25分08秒
ジェネレータの有効な副作用としては、処理を分割し小さな単位で再処理を施せる事。つまり、メモリの一時的なピークを迂回し、また反応速度を向上させる事が出来る。
で、実際の現場の利用になるわけだ。大体、最初は動きやすい、読みやすいコードで始める。そうすると、dict や list を渡しつつ、複数の処理をしていくコードが出来ていく。スクリプト言語は、書きやすく、すぐに実装できるのが、これ自体は良いことではある。
そして、メモリの利用に難があったり、レスポンス時間が長かったら、dict をジェネレータに置き換えて質の向上を計ったりする。そこで、引数を両方で取れる形にした例を準備した。イテレータ取得後の例は、dict を再構築しているのを分かりやすくする為。まあ、この関数自体もジェネレータにして、yield をするのがもっと実地に沿った形になる。
def process( dataset: Union[
Dict[Any, Dict[Any, Any]],
Callable[[], Generator[Tuple[Any, Dict[Any, Dict[Any, Any]]], None, None]],
],
) -> Generator[Tuple[Any, Any], None, None]]:
if isinstance(dataset, dict):
generator = dataset.items
else:
generator = dataset
new_dict = {}
for key, value in generator():
new_dict[key] = 2 * value
return new_dict
前回。
最近のコメント