【python】関数化 キーワード変数

2020年5月17日

pythonの関数には引数に対してデフォルト値(あらかじめ設定した値)を設定することができます。

デフォルト値として20を設定した場合、関数コール時の引数として10を与えた場合は10となります。関数コール時に引数を与えない場合は20が設定されます。

下記が実際に引数にデフォルト値を設定している関数になります。
関数コール時に引数を与えない場合、num1には10がnum2には20が設定されます。

def testFunctionNum( num1 = 10,num2 = 20):
    print( "num1 :",num1)
    print( "num2 :",num2)

この関数はnum1 とnum2の値を表示するだけの機能をもっています。
では、下記①-⑧で実行してみましょう。

①引数無し

引数を与えない場合は2変数ともデフォルト値が設定されます。

testFunctionNum()                     #num1 : 10
                                      #num2 : 20

②キーワード引数をnum1だけ指定

片方だけ引数を設定しないことも可能です。
num1だけ引数で設定(100)して、num2はデフォルト値(20)が設定されます。

testFunctionNum(num1=100)             #num1 : 100
                                      #num2 : 20

③キーワード引数をnum2だけ指定

②とは逆にnum2だけ引数で設定(200)して、num1はデフォルト値(10)が設定されます。

testFunctionNum(num2=200)             #num1 : 10
                                      #num2 : 200

④キーワード引数を全て指定

num1とnum2の両方に引数を設定しています。

testFunctionNum(num1=800, num2=900  ) #num1 : 800
                                      #num2 : 900

⑤キーワード引数を全て指定(順序入れ替え)

④の引数の順番を入れ替えています。これも正常に動作します。
順序が関数と異なっている場合でも正しく引数を渡せるのはキーワード引き数の利点ですね。

testFunctionNum(num2=4000,num1=5000 ) #num1 : 5000
                                      #num2 : 4000

⑥キーワードを指定せず引数を渡した場合

シンプルな引数の渡し方でも関数は動作します。
この場合引数の渡され方は関数のコール時の順番と関数の宣言順序と同一になります。

testFunctionNum(111,222)              #num1 : 111
                                      #num2 : 222

⑦ キーワードを指定せず引数を渡した場合(引数1つ)

キーワード引数が2つ以上あり、関数コール時にシンプルな引数渡しで引数が足りない場合も関数は動作します。
左から順番に代入されていきます。引数として渡した「111」はnum1に設定されます。

testFunctionNum(111)                  #num1 : 111
                                      #num2 : 20

⑧引数の重複(エラー発生の例)

下記の方法は間違った引数の渡し方になります。
111はnum1に渡され、333もキーワードを指定しているのでnum1に渡されます。
引数渡しが重複しているので、エラーとなります。

try:
    testFunctionNum(111,num1=333 )
except:
    import traceback
    traceback.print_exc()   #Traceback (most recent call last):
                            #  File "08_keyword.py", line 9, in sample8
                            #    testFunctionNum(111,num1=333 )
                            #TypeError: testFunctionNum() got multiple values for argument 'num1'

ソースコードはこちらから

このページで紹介している記事のソースコードの販売を行っています。
python基本を押さえたソースコードを収録しています。
購入頂いたソースコードは商用利用OKになります。

ソースコードの販売はこちら