関数定義の引数にはデフォルト値を設定することができます。つまり引数を指定した場合のみその引数を使用して処理を行い、引数を指定せずに関数を呼び出した場合はデフォルト値を使って処理を行う、といった具合です。
関数定義の引数にデフォルト値を指定するには次のように記述します。
def 関数名(引数 = デフォルト値): 処理
例として次のattack関数にデフォルト値を設定して呼び出してみましょう。
def attack(ad = 100): # 引数adのデフォルト値を100に指定 damage = ad * 2 # 与ダメージを算出 print("勇者は" + str(damage) + "のダメージを与えた") attack() # デフォルト値で実行 attack(200) # 引数を指定して実行
実行結果は次のようになります。
勇者は200のダメージを与えた 勇者は400のダメージを与えた
1行目は引数を指定せずに関数を呼び出しているのでデフォルト値が適用され、2行目は引数を指定して呼び出しているので指定した引数を使用して処理が行われています。
このようによく使う値にデフォルト値を指定しておくと関数呼び出しの際に引数を省略することができるため便利です。
Pythonではデフォルト値を指定したい引数は、デフォルト値のない引数よりも後に記述する必要があります。例えば次のようなコードがあったとします。
def attack(ad = 100, skill): # 引数adはデフォルト値あり、引数skillはデフォルト値なしで指定 damage = ad * skill # 与ダメージを算出 print("勇者は" + str(damage) + "のダメージを与えた") attack(200,2) # 引数を指定して実行
このコードではデフォルト値のある引数adよりも後にskillという引数を指定してしまっています。このコードを実行すると、次のようにエラーになってしまいます。
File "test.py", line 1 def attack(ad = 100, skill): # ad変数のデフォルト値を100に指定 ^ SyntaxError: non-default argument follows default argument
このように複数の引数のうち一部にのみデフォルト値を指定したい場合はデフォルト値のない引数を先に記述します。
def attack(skill,ad = 100): # デフォルト値のない引数を先に記述 damage = ad * skill print("勇者は" + str(damage) + "のダメージを与えた") attack(200,2)
実行結果は次のようになります。
勇者は400のダメージを与えた
ちゃんと関数を呼び出すことができました。