4.2. オプションの引数と名前付きの引数を使う

Python では関数の引数はデフォルト値を持てます. その引数無しで関数が呼び出されると, 引数はデフォルト値を取ります. さらに, 名前付きの引数を使って任意の順序で引数を並べることができます. SQL Server Transact/SQL のストアドプロシージャも同じことができるので, もしあなたが SQL Server スクリプトの仙人なら, この部分を流し読みできます.

以下は, 2 つのオプション引数を持つ関数 info の例です


def info(object, spacing=10, collapse=1):

spacingcollapse はデフォルト値を持っているので, オプション引数です. object はデフォルト値を持っていないので, 必須の引数です. info が 1 つの引数で呼び出されると, spacing はデフォルト値の 10 になり collapse はデフォルト値の 1 になります. info が 2 つの引数で呼び出されると, collapse はやはりデフォルト値の 1 になります.

例えば, collapse の値は指定したいが spacing はデフォルト値にしたいとします. ほとんどの言語では運の悪いことに, 関数を 3 つの引数で呼び出す必要があるでしょう. しかし Python では, 引数は名前で指定でき, 任意の順序で並べられるのです.

Example 4.4. info の正しい呼び出し方

info(odbchelper)                    1
info(odbchelper, 12)                2
info(odbchelper, collapse=0)        3
info(spacing=15, object=odbchelper) 4
1 1 つの引数だけで呼び出すと, spacing はそのデフォルト値 10 を取り, collapse はそのデフォルト値 1 を取ります.
2 2 つの引数で呼び出すと, collapse はそのデフォルト値 1 を取ります.
3 ここでは明示的に collapse 引数に名前を付け値を指定しています. spacing にはやはりデフォルト値の 10 を取ります.
4 (デフォルト値を持たない object のような) 必須の引数でも名前付きにすることができ, 名前付き引数は任意の順番で並べられます.

これはかなり変に見えますが, 引数は単なる辞書だということを理解するとそうでもなくなりますThis looks totally whacked until you realize that arguments are simply a dictionary. 引数名無しの“普通の”関数呼び出しの方法は実は単なる略記で, Python は関数宣言で指定された順に引数と値を対応させています. そしてほとんどの場合, 関数は“普通の”方法で呼び出されるでしょうが, 必要なときにはいつでも融通を効かせられます.

Note
関数を呼び出すときにしなければならないことは, 必須の引数に対しそれぞれ (なんらかの方法で) 値を指定することだけです. その作法や順序はあなた次第です.

オプションの引数についてさらに知るには