関数を呼び出すときに引数を使って値を渡す

関数を呼び出す時に引数を指定することで関数側でその値を利用することができます。ここでは関数を呼び出す時に引数を指定する方法について解説します。

(Last modified: )

引数を指定した関数の呼び出し

関数を呼び出す時に引数を利用することで数値や文字列といった値を関数に渡すことができます。呼び出された関数では、呼び出した側から渡された値をそれぞれ変数に代入し関数内で利用することができます。例えば次のような関数を例に考えてみます。

def myfunc(str1, num1):
    print(str1)
    print(num1)

関数では関数名のあとに続く ( と ) の中に引数を記述します。これを仮引数と呼びます。仮引数には、関数の呼び出し側から渡されてくる値を受け取るための変数名を記述します。上記の関数の場合、引数が 2 つ定義されており、それぞれ str1 と num1 という変数が記述されています。

関数を呼び出す時には、関数側で定義されている引数の数だけ値を指定して呼び出します。これを実引数と呼びます。値は呼び出す関数名を記述したあとで ( と ) の中に記述します。この関数は 2 つの引数が定義されているので関数を呼び出す時には値を 2 つ指定して次のように呼び出します。

myfunc("Yamada", 28)

関数が呼び出されると、呼び出し側で指定した値がそれぞれ関数側で引数のところに記述した変数に代入されます。今回の場合は呼び出し側で "Yamada" と 28 の 2 つの値を指定していますので、関数側では変数 str1 に "Yamada" が代入され、変数 num1 には 28 が代入されます。

関数内では引数のところに記述した変数に代入された値を参照し、利用することができます。先ほどの関数の場合は引数に渡されてきた値を画面に出力しています。結果として、関数を呼び出し時に指定した 2 つの値が、関数内で画面に出力されることになります。

関数に渡すことができる値は、文字列や数値だけではなくリストやタプルのオブジェクトでも可能です。呼び出された関数側では引数を使って渡されたリストやタプルのオブジェクトを利用することができます。なお一度作成されると変更ができないイミュータブルなオブジェクトの数値や文字列と、あとから変更できるミュータブルなオブジェクトのリストでは取り扱い方法が少し異なります。詳しくは「Pythonの引数における参照渡しと値渡しについて」で解説します。

サンプルコード

次のサンプルを見てください。

def myfunc(str1, num1):
    print("Name: " + str1 + ", Old: " + str(num1))

myfunc("Yamada", 28)
>> Name: Yamada, Old: 28
myfunc("Suzuki", 32)
>> Name: Suzuki, Old: 32

今回のサンプルでは引数に渡す値を変えて関数を 2 回呼び出しています。呼び出された関数では引数を使って渡された値を使用して画面に出力を行っています。

もう一つサンプルを見てください。

def myfunc(mylist):
    print("Name: " + mylist[0] + ", Old: " + str(mylist[1]))

myfunc(["Yamada", 28])
>> Name: Yamada, Old: 28
myfunc(["Suzuki", 34])
>> Name: Suzuki, Old: 34

今回のサンプルではリストのオブジェクトを引数に指定して関数を呼び出しています。関数側では引数を使って渡されたリストのオブジェクトの要素から値を取得して画面に出力を行っています。

実引数と仮引数の数

関数を呼び出す時に指定する値の数(実引数の数)と、呼び出される関数側で定義している引数の数(仮引数の数)は同じである必要があります。関数側で例えば 3 つ引数を受け取るように定義されている場合、この関数を呼び出すには 3 つの値を指定して呼び出す必要があります。

もし関数側で 3 つ引数を受け取るように定義されているのに、関数を呼び出すときに値を 2 つしか指定しなかったり、 4 つも指定したばあいには TypeError エラーが発生します。

例えば次のように引数を 2 つ受け取るように記述した関数を定義します。

def myfunc(num1, num2):
    return num1 + num2

この関数を呼び出す時に、値を 2 つ指定して呼び出した場合は正常に呼び出しが行われます。

def myfunc(num1, num2):
    return num1 + num2

myfunc(10, 20)
>> 30

この関数を呼び出す時に、値を 1 つだけしか指定せずに呼び出すと TypeError エラーとなります。

def myfunc(num1, num2):
    return num1 + num2

myfunc(10)

>> Traceback (most recent call last):
>>   File "<stdin>", line 1, in <module>
>> TypeError: myfunc() missing 1 required positional argument: 'num2'

同じようにこの関数を呼び出す時に、値を 3 つ指定して呼び出すと TypeError エラーとなります。

def myfunc(num1, num2):
    return num1 + num2

myfunc(10, 20, 30)

>> Traceback (most recent call last):
>>   File "<stdin>", line 1, in <module>
>> TypeError: myfunc() takes 2 positional arguments but 3 were given

このように関数側の仮引数の数と、関数を呼び出す側の実引数の数は同じである必要がありますのご注意ください。なお引数に対してデフォルト値を指定したり、可変数の引数を設定した場合は別です。これらは別のページで解説します。

-- --

関数を呼び出す時に引数を指定する方法について解説しました。

( Written by Tatsuo Ikura )

プロフィール画像

著者 / TATSUO IKURA

これから IT 関連の知識を学ばれる方を対象に、色々な言語でのプログラミング方法や関連する技術、開発環境構築などに関する解説サイトを運営しています。