リストを受け入れる関数を呼び出すとき、誰が責任を負いますか (呼び出し元 - ユーザー、または呼び出された - 関数list
) generator
。
例:
>>> def print_collection(coll):
... for element in coll:
... print element
>>> def print_collection_twice(coll):
... print_collection(coll)
... print_collection(coll)
リストを使用すると、驚くことなく機能します。
>>> print_collection_twice( [x*2 for x in xrange(3)] )
0
2
4
0
2
4
また、ジェネレーターを使用すると、明らかに一度だけ出力されるため、厄介なバグにつながる可能性があります。
>>> print_collection_twice( (x*2 for x in xrange(3)) )
0
2
4
ここでのベストプラクティスは何ですか? 関数はリストを想定する必要があり、ユーザーは を提供する責任がありますか、それともユーザーが気にしないようにlist
関数は常に最初に実行する必要がありますか?real_list = list(input_list)
編集
私は要素の型をチェックする方法を知ってassert
おり、私の質問はかなり高レベルです