関数の定義と関数の呼び出し

ユーザー定義関数を定義する方法および関数を呼び出す方法について解説します。

(Last modified: )

関数を定義する

ユーザーが定義する関数は、次のように定義します。

def 関数名(引数1, 引数2, ...):
    関数内で実行する処理

    return 戻り値

def のあとに関数名を指定します。関数名の付け方についてはあとで解説します。

関数名のあとに続く ( と ) の中に引数(仮引数と呼ばれます)を記述します。引数は 0 個でもいいですし、複数指定する場合はカンマ(,)で区切って記述します。(引数を受け取る関数の定義と利用方法については「引数を指定して関数を呼び出す」で解説します)。下記は引数が 0 個の場合です。

def 関数名():
    関数内で実行する処理

    return 戻り値

関数が呼び出されると、ブロック内の処理が順に実行されます。複数の処理を実行する場合はブロック内に記述してください。

def 関数名(引数1, 引数2, ...):
    関数内で実行する処理1
    関数内で実行する処理2
    関数内で実行する処理3

    return 戻り値

※ Python ではブロックをインデントを使って定義します。詳しくは「Pythonにおけるインデントを使ったブロックの定義」を参照されてください。

関数には return 文を使って関数の呼び出し元に値を返すことができます。返す値は return 文のあとに記述します。 return 文は必要なければ記述する必要はありません。 return 文が実行されないまま関数のブロックの最後まで到達すると None が呼び出し元に返ります。

サンプルコード

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

def myfunc():
    print("Hello")

myfunc()
>> Hello

ユーザー定義関数 myfunc を定義し、その後で関数を呼び出しました。関数内で print 関数が実行されて画面に文字が出力されました。

関数を呼び出す

定義した関数は呼び出して利用することができます。関数は次のように呼び出すことができます。

関数名(引数1, 引数2, ...)

呼び出す関数名を記述したあとで ( と ) の中に引数(実引数と呼ばれます)を記述します。(引数を指定して関数を呼び出す方法については「引数を指定して関数を呼び出す」で解説します)。引数は 0 個でもいいですし、複数指定する場合はカンマ(,)で区切って記述します。下記は引数が 0 個の場合です。

関数名()

関数を呼び出すと関数から値が帰ってきます。帰ってきた値を利用する場合は、例えば次のように変数に代入することができます。

val = 関数名(引数1, 引数2, ...)

呼び出された関する側では return 文を使って任意の値を関数の呼び出しもとに返すこともできますし、 return 文を実行しなかった場合は None が返ってきます。返ってきた値を関数の呼び出し元では利用してもしなくても構いません。

関数は呼び出される前に定義がされていなければなりません。例えば次のように関数が定義されてから関数を呼び出した場合は正常に動作します。

def sample():
    print("Hello")

sample()
>> Hello

逆に定義がされていない関数を呼び出した場合はエラーが発生します。

sample()

>> Traceback (most recent call last):
>>   File "<stdin>", line 1, in <module>
>> NameError: name 'sample' is not defined
サンプルコード

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

def myfunc():
    print("Hello")

myfunc()
>> Hello
myfunc()
>> Hello
val = myfunc()
>> Hello
print(val)
>> None

定義した関数は何度でも呼び出すことができます。今回は定義した関数を 3 回呼び出しました。また 3 回目に呼び出した時は、関数から返ってきた値を変数に代入し、その変数の値を出力してみました。

関数名の付け方

関数名は次のルールに従って付けてください。(変数名と同じです)。

・使用できる文字は a ~ z 、 A ~ Z 、 0 ~ 9 、アンダーバー(_)、漢字など
・一文字目に数値(0~9)は使用できない
・一文字目にアンダーバーは使用できるが特別な用途で使用されているケースが多いので通常は使用しない方がいい
・大文字と小文字は区別される
・予約語は使用できない

一つ一つ確認していきます。

関数名には英数字とアンダーバーに加えて Python 3 では漢字なども使用できます(あまりおすすめではありません)。

def 挨拶():
    print("こんにちは")

挨拶()
>> こんにちは

数字は関数名に使用できますが、 1 文字目で使用すると SyntaxError エラーとなります。

def 7hello():

>>   File "≤stdin>", line 1
>>     def 7hello():
>>         ^
>> SyntaxError: invalid syntax

関数名では大文字と小文字は区別されます。

def Sample():
    print("Hello")

def sample():
    print("bye")

Sample()
>> Hello

sample()
>> bye

予約語というのは Python の構文などで使用される単語です(例えば if とか and とか)。予約語の一覧は次の通りです。

Falseawaitelseimportpass
Nonebreakexceptinraise
Trueclassfinallyisreturn
andcontinueforlambdatry
asdeffromnonlocalwhile
assertdelglobalnotwith
asyncelififoryield

予約語は関数名には使用できません。変数名として定義しようとすると SyntaxError エラーとなります。

def from():

>>   File "<stdin>", line 1
>>     def from():
>>         ^
>> SyntaxError: invalid syntax

なお組み込み関数と同じ名前でユーザー定義関数を定義すると、関数が上書きされます。例えば絶対値を返す組み込み関数 abs を同じ関数名を使って上書きしてみます。

print(abs(-5))
>> 5

def abs(num):
    return 0

print(abs(-5))
>> 0

最初に abs 関数を呼び出したときはまだ組み込み関数の方が呼び出されるため絶対値を取った値が返されてきますが、同じ関数名で常に 0 を返すように関数を定義したあとで abs 関数を呼び出すと 0 が帰ってきます。

-- --

ユーザー定義関数を定義する方法、および関数を呼び出す方法について解説しました。

( Written by Tatsuo Ikura )

プロフィール画像

著者 / TATSUO IKURA

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