関数への反復可能な引数のデフォルトとして空のタプルを使用することの欠点はありますか? 関数に必要なものは不変のイテラブルであると仮定します。例えば
def foo(a, b=()):
print a
for x in b:
print x
この使用例の多くの例を見つけることができないようです。
関数への反復可能な引数のデフォルトとして空のタプルを使用することの欠点はありますか? 関数に必要なものは不変のイテラブルであると仮定します。例えば
def foo(a, b=()):
print a
for x in b:
print x
この使用例の多くの例を見つけることができないようです。
不変の空のタプルになるようにデフォルトを設計することには、本質的な問題はありません。ただし、これは非直感的な設計アプローチと見なすことができます。タプル内の特定の場所を参照すると、例外が発生します。引数チェックの作成に十分注意していれば、これは問題にはなりませんが、特定の場所からのデータを予期するようにコードの残りの部分をビルドし、タプルが空であることを確認しないと、エラーが発生します。
それは、議論の目的が何であるかによって異なります。空のリストには、デフォルトの引数 (少なくとも何らかの方法でリストを変更するアプリケーション) のより明白なアプリケーションがありますが、空の不変タプルには、引数が指定されていないことを示す以外に、デフォルトとしての直感的な用途はありません。
デフォルト引数の典型的なアプローチは、それらをNoneに設定することです。これにより、引数が設定されていない場合に完全に明確になります。
def foo(a, b=None):