Python: 関数の使い方

Pythonでの関数の使い方について、 関数の定義方法、呼び出し方、引数の指定方法、戻り値の受け取り方などについて 解説しています。

関数の定義

Pythonで関数を定義する場合は次のように記述します。

書式
def 関数名(引数1, 引数2, ...):
	処理文
	...
	
	return 戻り値

「def」の後に関数名を書き、関数名の後の()カッコ内に引数を書きます。
引数がない場合は()カッコだけで、引数が複数の場合は引数をカンマで区切ります。

戻り値がある場合は return の後に戻り値を書き、 戻り値がない場合は単に return と書くか、 何も書かないかのどちらかです。

関数定義の具体例

具体的に関数を定義してみます。
2つの引数を受け取り、受け取った2つの引数を足して返す関数を作ります。

# 関数定義 ここから
def plus(x, y):

	return x + y
# 関数定義 ここまで

# 関数 plus を呼び出す
n = plus(2, 7)

print(n) # 9

関数の定義場所

関数を定義する場合は、呼び出す場所よりも前に記述してください。
Pythonは先頭からコードを読み込んで実行するので、 呼び出し場所よりも前に関数定義がないとエラーが発生します。

関数の呼び出し

関数を呼び出す場合は「関数名(引数)」と記述します。 戻り値がある場合は変数で戻り値を受け取ります。

# 戻り値なしの場合
関数名(引数)

# 戻り値ありの場合
変数 = 関数名(引数)

実際に呼び出すコードを書いてみます。
定義した関数「plus」を呼び出します。 2つの引数を指定し、戻り値を変数「n」に代入します。

# 関数定義 ここから
def plus(x, y):

	return x + y
# 関数定義 ここまで

# 関数 plus を呼び出す
n = plus(2, 7)

print(n) # 9

関数を呼び出す場所

先ほどのコードのように、関数を呼び出す場合は 先に関数を定義して、その後で呼び出します

Pythonは先頭からコードを読み込んで実行するので、 呼び出し場所よりも前に関数定義がないとエラーが発生します。

引数

関数に渡す値を「引数」といいます。 引数を受け取った関数側では、引数を元に何らかの処理を行います。

基本的な引数の指定方法は次の通りです。
関数名の後の()丸括弧内に引数を指定します。

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

ここでは関数の引数の指定方法や、引数に関連する用語を説明します。

引数を1つ渡す

引数を1つ渡す場合のコード例です。 「関数名(引数)」と指定します。

# 関数定義
def double(x):
	x = x * 2
	return x

# ------------------

# 関数呼び出し
n = double(10)

print(n)

引数を複数渡す

引数を2つ渡す場合のコード例です。 「関数名(引数1, 引数2)」と指定します。

# 関数定義
def plus(x, y):
	
	return x + y

# ------------------

# 関数呼び出し
n = plus(3, 5)  # 8

引数なしの場合

引数がない場合のコード例です。 「関数名()」と記述します。

# 関数定義
def func():
	
	print("hello")

	return

# ------------------

# 関数呼び出し
func()  # hello

仮引数と実引数

引数を区別するために「仮引数」、「実引数」と呼ぶことがあります。

「仮引数」とは関数定義部分で指定する引数のことです。 定義段階では仮でしかないので仮引数といいます。

def 関数名(仮引数1, 仮引数2, ...):
	処理
	return

「実引数」とは関数を呼び出す部分で実際に指定する引数のことです。

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

つまり「実引数」が関数を呼び出す部分の引数、 「仮引数」が関数定義部分の引数のことです。

値渡しと参照渡し

Pythonでは変更不可のオブジェクトは値渡しとなり、 変更可能なオブジェクトは参照渡しとなります。

変更不可のオブジェクトとしては、文字列・整数などがあり、 引数としてこれらを指定した場合は値渡しとなります。
変更可能のオブジェクトとしてはリスト・ディクショナリなどがあり、 引数としてこれらを指定した場合は参照渡しとなります。

関連ページ: Pythonの主なデータ型

デフォルト引数を指定

引数にはあらかじめデフォルト値を与えておくこともできます。 その場合、関数の引数定義部分に「引数 = デフォルト値」と記述します。 そして関数を呼び出すときに引数が省略された場合、デフォルト値が適用されます。

def 関数名(引数 = デフォルト値)

例えば引数が3つある場合、次のように引数を指定できます。

# すべての引数にデフォルト値を指定
def func(a = 1, b = 1, c = 1)

# 最後の2つに指定
def func(a, b = 1, c = 1)

# 最後だけ指定
def func(a, b, c = 1)

# デフォルト値なし
def func(a, b, c)

注意点として、ある引数にデフォルト引数を指定した場合、 その右側にある引数にもデフォルト引数を指定する必要があります。

ですから次のような指定はできません。

# 最初だけ指定はNG
def func(a = 1, b, c)

# 真ん中だけ指定はNG
def func(a, b = 1, c)

# 前半2つだけ指定はNG
def func(a = 1, b = 1, c)

戻り値

関数が返す情報(値)を戻り値といい、 Pythonではreturn文を使って戻り値を返します。
ここでは関数の戻り値の記述方法について説明します。

戻り値がない場合

戻り値がない場合は次のように記述します。
下の関数「func」は受け取った引数をprint()で表示するだけで、 戻り値はありません。

# 関数定義 ここから
def func(s):
	
	print(s)
	
	return
# 関数定義 ここまで

# 関数を呼び出す
func("hello")  # hello


戻り値がない場合は、return文はなくても構いません。 ブロックの終了とともに関数を抜け出すからです。
return文を書いておくと、「関数の終了場所」と 「戻り値がないこと」が明確にわかるというメリットがあります。

戻り値がある場合

次は戻り値がある場合の記述です。
下の関数「plus」は引数を2つ受け取り、 2つの引数を足した数値を戻り値として返します。

# 関数定義 ここから
def plus(x, y):
	
	return x + y
# 関数定義 ここまで

# 関数を呼び出す
n = plus(1, 7)

print(n) # 8

戻り値がある場合は return の後に戻り値を指定します。
呼び出し側は、変数「n」に戻り値を代入しています。

戻り値が複数ある場合

Pythonでは戻り値を複数返すことができます。
下の関数「double」は引数を2つ受け取り、 それぞれを2倍した値を返します。(戻り値が2つ)

# 関数定義 ここから
def double(x, y):

	# それぞれ2倍する
	x = x * 2
	y = y * 2

	return x, y
# 関数定義 ここまで

# 関数を呼び出す
n1, n2 = double(3, 6)

print(n1, n2)  # 6 12

戻り値が複数の場合は return の後にカンマ区切りで戻り値を指定します。 この複数の値はタプルなので次のようにも記述できます。

return (x, y)

戻り値を受け取る側では、 「n1, n2 = double(3, 6)」とタプルをアンパック(展開)して受け取ります。 もしアンパック(展開)しない場合は次のようになります。

n = double(3, 6)

print(n) # (6, 12)