Pythonの関数への引数にデフォルト値を設定すると引数が省略できる
Pythonでは関数への引数にデフォルト値を設定すると呼出側で渡す引数が省略できます。
Pythonの関数の宣言方法は以下の記事を参照してください。
引数にデフォルト値を設定する
Pythonの関数への引数にデフォルト値を設定しておくと、呼び出し側で引数を省略することができます。
引数のデフォルト値の設定は関数宣言の引数に「=(イコール)」でデフォルト値を結んで宣言します。
#引数にデフォルト値を設定しない関数宣言 def func1( param1, param2, param3 ) : print( "param1={} param2={} param3={}".format( param1 , param2, param3 )) p1 = 1 p2 = 2 p3 = 3 func1( p1, p2, p3 )
関数をデフォルト値なしで宣言すると上記のように呼び出し側ですべての引数をしていすることになります。
実行結果は以下のようになります。
param1=1 param2=2 param3=3
試しに最後の引数を削除すると
#引数にデフォルト値を設定しない関数宣言 def func1( param1, param2, param3 ) : print( "param1={} param2={} param3={}".format( param1 , param2, param3 )) p1 = 1 p2 = 2 p3 = 3 func1( p1, p2 ) #あえて引数を2つで呼び出す
Traceback (most recent call last): File "main.py", line 8, in <module> func1( p1, p2 ) #あえて引数を2つで呼び出す TypeError: func1() missing 1 required positional argument: 'param3'
となり、エラーで実行できません。
デフォルト値を設定する
上記の処理の関数宣言にデフォルト値を設定すると
#引数にデフォルト値を設定した関数宣言 def func1( param1, param2 = 20 , param3 = 30 ) : #最後の値だけ呼出元で省略 print( "param1={} param2={} param3={}".format( param1 , param2, param3 )) p1 = 1 p2 = 2 p3 = 3 func1( p1, p2 ) #あえて引数を2つで呼び出す
を実行すると
param1=1 param2=2 param3=30
となり、デフォルト値を設定しても引数で値が渡されるとその値、デフォルト値が設定され呼出元で引数が省略されるとデフォルト値を使って処理が行われていることがわかります。
デフォルト値のルール
デフォルト値を設定する場合の注意としては、デフォルト値のない引数をデフォルト値のある引数よりも後に記述することはできません。
#引数にデフォルト値を設定した関数宣言 def func1( param1, param2 = 20 , param3 ) : #2番目の値だけデフォルト値を設定 print( "param1={} param2={} param3={}".format( param1 , param2, param3 )) p1 = 1 p2 = 2 p3 = 3 func1( p1, p2 ) #あえて引数を2つで呼び出す
これは
File "main.py", line 2 def func1( param1, param2 = 20 , param3 ) : #2番目の値だけデフォルト値を設定 ^ SyntaxError: non-default argument follows default argument
となり実行できません。
リンク