Python(関数定義のデフォルト引数)

関数を定義する場合、デフォルト引数を設定して、特に引数を渡さなくても関数を呼び出して利用することができますが、デフォルト引数を設定する場合、第二引数以上の引数がある場合は注意しないといけないことが・・・

引数が1つの場合、問題なくデフォルト引数を設定することができます。

引数が2つ以上の場合、第一引数にデフォルト値を、第二引数に入力させたい引数を設定するとエラーが・・・

この場合、第一引数を入力させたい変数に、第二引数にデフォルト引数を指定すれば大丈夫なのですが、ちょっと不便に感じます。

Pythonの仕様なのでこういうものなんだと思っておいてください。

引数を変えたい場合は*xsのように可変引数にしてlenで要素数を調べて処理を分けることができますが、可変引数を受け取る場合、タプルを生成していることになるのを覚えておきましょう。
可変引数を用いたサンプルは Python(MyRangeクラス 負数対応ver) を参照してください。

2019/11/06追記
デフォルト引数に空のリストやリストを要素としたタプルなどを持たせる場合は注意が必要!

このように引数の値を書き換えることが可能だったりします(汗)
デフォルト引数に変更可能な値を利用しない、もしくはデフォルト引数の値を返さずに関数内部でのみ利用する保障がある場合に、変更可能な値を引数にするようにしましょう。

ちなみに変更可能かどうかはhash()メソッドで固有のIDに数値化できるかどうかで確認することができます。
strやint、floatはハッシュ化することができますが、listやdictはunhashableな値になります。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

Python

前の記事

Python(素数イテレータ)
Python

次の記事

Python(デコレータ)