リストを受け取ってループで処理する関数を実装するとき、引数のタイプヒントに list ではなく最小の要求として Iterable を書くことを好む人がいる。コードの実装が引数に対して必要としている最小要件(必要十分条件)を表すためだ。 def func(arg: Iterable[int]) -> None: for a in arg: do_work(a) しかし、その関数でログかトレースにその引数の中身を追加したくなった場合にどうしたらいいだろうか? OpenTelemetryのAttributeValue型はSequenceには対応しているがIterableには対応していない。 また、Iterableを一度巡回してしまうと再び巡回できる保証はないので、 arg の中身を複数回使うことができない。 引数のタイプヒントをlistかSequenceに修正しようと思っても、他のコードも「最小