Pythonでの関数を簡単に見てきました。関数に引数を与えると処理に幅が広がります。
この引数は一つだけでなく複数指定することができ、処理の幅が広がり、複雑な操作もできるようになります。
ここでは関数の引数についての使い方を広げてみましょう。
位置引数
Pythonの関数で引数を使う時、一つだけではなく、複数指定できます。関数名の後の丸括弧の中にカンマで区切って、引数を指定して行きます。
注意点としては、キーワードを指定した位置が処理に関係するということです。
簡単なコードで見てみましょう。
def dinner_menu(food, drink, dessert):
print("夕食は" + food + "を用意しています。")
print("飲み物は" + drink + "をおすすめします。")
print("デザートに" + dessert + "をどうぞ。")
引数の順番と内容に注意して、値を入れて実行してみます。
dinner_menu(“ハンバーグ”,”赤ワイン”, “アイスクリーム”) と入れてみます。ファイル名はargument.pyとしてAtomで実行しています。
キーワードの位置に対応して値が出力されているのがわかります。
これを、dinner_menu(“ハンバーグ”,”アイスクリーム”,”赤ワイン” )として実行してみましょう。するとこうなります。
出力された文章はおかしな意味になってしまいます。
このように、先頭から順に引数の位置を対応させて渡されるのが位置引数です。
位置引数は、ここの引数の位置と意味を覚えておかないと正しく処理されないということに注意して利用しないといけません。
キーワード引数
位置引数の混乱を避けるために、引数の名前を指定して利用する方法があります。これをキーワード引数と言います。
これは実行時に、引数に代入した形で関数を呼び出すことになります。
上の間違えた例を修正する形で実行してみましょう。
dinner_menu(food="ハンバーグ", dessert="アイスクリーム", drink="赤ワイン" )
位置が違いますが、引数名をそれぞれに対応させて関数を呼び出します。
正しい位置で出力されているのがわかりますね。
位置引数とキーワード引数は、両方混ぜて関数を呼び出すことができますが、位置引数を先に書かないといけません。
dinner_menu("ハンバーグ", dessert="アイスクリーム", drink="赤ワイン")
結果は同じになります。
ここでは関数の引数がfoodが先頭になっているので、この順番からはじめています。残りの引数はキーワード引数を使えば、順番は入れ替わっていても問題ありません。
デフォルト引数
次はデフォルト引数を扱ってみましょう。このデフォルト引数は関数を定義した時の引数にあらかじめ指定の値を入れておくと、引数を指定せずに関数を呼び出したた時にこの値で実行してくれるわけです。
これまで使って来たコードを書き換えてみましょう。
def dinner_menu(food="ハンバーグ", drink="赤ワイン", dessert="アイスクリーム"):
print("夕食は" + food + "を用意しています。")
print("飲み物は" + drink + "をおすすめします。")
print("デザートに" + dessert + "をどうぞ。")
関数の引数に最初から値を入れています。
これを引数を指定せずに関数を呼び出してみましょう。
引数を指定せずに関数を呼び出すと、関数内で指定された引数の値で実行されているのがわかります。
引数を指定して呼び出すと、次のように結果を変更することができます。
dinner_menu("ステーキ", drink="赤ワイン", dessert="シャーベット")
引数の値に変更を加えた部分だけ変更されているのがわかりますね。
デフォルト引数の注意点として、リスト型や辞書型をデフォルト引数に使うと操作を重ねる中でこれらを書き換えてバグに繋がることがあるので、使わない方が良いという事だけ覚えておきましょう。
まとめ
Pythonの関数は引数を複数利用できます。関数の定義時にカンマで区切って指定しておきます。
関数は引数の先頭から順番に操作していきます。これを位置引数と言います。この引数の位置と意味を覚えておかないと、値を違う引数に代入してしまうので注意が必要です。
関数呼び出し時に、引数と値をセットで指定して実行すると、位置引数のように順番と内容を覚えておかなくても実行が可能です。これをキーワード引数と言います。位置引数を先頭に使えば、キーワード引数と両方合わせて使うことができます。
関数にあらかじめ引数の値を代入して置いて定義すると、そのまま実行すればその引数が利用されます。これをデフォルト引数と言います。関数呼び出し時に、引数の値を変えてやれば、結果を変えることができます。