Python

【Python】関数の定義方法と使い方を解説

この記事では、Pythonの関数の使い方を解説します。関数とは、処理をまとめて何度でも呼び出せるようにしたものです。なんども同じ処理をしたい場合は、関数を定義した方が効率的です。それでは、関数の定義方法と使い方を見ていきましょう❗️

関数の定義

Pythonの関数は、以下のようにdefキーワードを使って定義します。

def 関数名():
    なんらかの処理
関数の命名規則
  • 関数名には英小文字を使う
  • 単語のつなぎ目は_(アンダーバー)で区切る(get_data()みたいな感じ)
  • 予約語や組み込み関数と名前が被らないように注意する

サンプル

以下のコードでは、funcという名前の関数を定義しています。

def func():
    pass

関数の呼び出し

関数名の後に()を付けて記述することで、その関数を呼び出すことができます。

関数名()

サンプル

例えば以下のコードは、「Hello world」を出力するだけのhelloworld関数を定義し、2回呼び出しています。

def helloworld():
    print('Hello world')

helloworld()
helloworld()

実行結果

Hello world
Hello world

関数の参照を変数に代入する

関数の参照を変数に代入できます。その際は、()を付けずに関数名を記述します。

変数 = 関数名

変数に代入された関数は実行することもできます。

変数 = 関数名

変数()  # 代入された関数の実行

サンプル

以下のコードで定義したfunc関数は、1+2print()で出力するだけの関数です。その関数を通常の呼び出しと、変数に参照を渡して呼び出す2パターンで実行しています。

# func関数の定義
def func():
    print(1 + 2)


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

# f変数にfunc関数の参照を代入
f = func
# f変数に代入されたfunc関数の呼び出し
f()

実行結果

3
3

引数

関数には、引数というものを定義することができます。引数を定義することで関数呼び出し時に値を受け取り、関数内で使用することができます。

同じ処理を値だけ変えて実行したい場合などに使用されます。

def 関数名(引数名):
    なんらかの処理

引数は複数定義することができます。

def 関数名(引数名1, 引数名2, ..., 引数名N):
    なんらかの処理

呼び出し

引数が定義された関数は、以下のように呼び出します。

関数名(引数に渡す値)

引数がいくつか定義されている場合は、以下のように呼び出します。

関数名(値1, 値2, ..., 値N)

サンプル

以下のコードでは、引数で受け取った値で和を計算しています。

def add(x, y):
    print(f'{x} + {y} = {x + y}')

add(1, 2)

実行結果

1 + 2 = 3

初期値を定義する

引数には初期値を定義することができます。初期値を定義することで関数呼び出し時にその引数を省略することができます。

def 関数名(引数名=初期値):
    何かしらの処理

初期値を定義した引数は、通常の引数の前には定義することができません。以下のように定義するとエラーが発生します。

def 関数名(引数名=初期値, 通常の引数):
    何かしらの処理

サンプル

以下のコードは、add関数のy引数に初期値を定義しています。

# y引数に初期値2を定義
def add(x, y=2):
    print(x + y)


# y引数の省略
add(1)

# もちろん値を渡すことも可能
add(1, 5)

実行結果

3
6

引数名を指定して値を渡す(キーワード呼び出し)

関数呼び出し時に引数名を指定して値を渡すことで、特定の引数に値を渡すことができます。このような呼び出し方を「キーワード呼び出し」と呼びます。

以下のように、呼び出し時に引数名を指定して値を渡します。

関数名(引数名=値)

サンプル

以下のコードでは、呼び出し時にy引数にのみ値を渡しています。

def add(x=1, y=2):
    print(x + y)

add(y=10) 

実行結果

11

キーワード呼び出しの強制

引数として*(アスタリスク)を記述することで、それ以降の引数にキーワード呼び出しを強制することができます。

def 関数名(引数名1, *, 引数名2, 引数名3):
    何かしらの処理

この場合、引数2と引数3は必ずキーワード呼び出しする必要があります。

サンプル

試しにキーワード呼び出しを強制してみます。

def func(a, *, b, c):
    pass


func(1, b=2, c=3)

func(1, b=2, 3)  # エラー
func(1, 2, c=2)  # エラー
func(1, 2, 3)    # エラー

可変長引数

可変長引数を使うことで、1つの引数で複数のデータを受け取ることができます。可変長引数には、タプルで受け取る方法辞書として受け取る方法があります。

タプルとして受け取る(*args)

引数名の前に*(アスタリスク)を付けることで、1つの引数で複数のデータを受け取る事ができ、関数内でタプルとして使うことができます。タプルな可変長引数には、argsという名前がよく使われますが構文的な意味はありません。

def 関数名(*引数名):
    何かしらの処理

呼び出し方法

普通に複数の値を渡すだけで関数内でタプルとして扱えます。

関数名(値1, 値2, ..., 値N)

キーワード呼び出しの強制

可変長引数の後ろに定義されている引数は、キーワード呼び出しが強制されます。

def func(*args, arg):
    pass

# args = 1, 2, 3  arg = 4 
func(1, 2, 3, arg=4)

サンプル

試しに、タプルな可変長引数を受け取って関数内で使ってみましょう!

def func(*args):
    print(args)
    print(type(args))
    for arg in args:
        print(arg)


func(1, 2, 3)

実行結果

(1, 2, 3)
<class 'tuple'>
1
2
3

辞書として受け取る(**kwargs)

引数名の前に*(アスタリスク)を2つ付けることで、1つの引数で複数のデータを受け取り、関数内で辞書として使うことができます。

タプルな可変長引数と違い、必ず最後に定義しなければなりません。

辞書な可変長引数には、kwargsという名前が使われますが構文的意味はありません。

def 関数名(**kwargs):
    何かしらの処理

呼び出し

以下のようにキーワード呼び出しすることで、辞書な可変長引数にkeyvalueを引き渡すことができます。keyに数値を指定することはできません。

関数名(key1=value1, key2=value2, ..., keyN=valueN)

サンプル

試しに、辞書な可変長引数を受け取ってみて、関数内で使ってみましょう!

def func(**kwargs):
    print(kwargs)
    print(type(kwargs))
    for key, value in kwargs.items():
        print(key, value)


func(one=1, two=2, three=3)

実行結果

{'one': 1, 'two': 2, 'three': 3}
<class 'dict'>
one 1
two 2
three 3
【Python】特殊な引数の使い方【位置専用・キーワード専用・任意引数リスト】この記事では、Pythonの特殊な引数の使い方を解説します。仮引数にオプションを記述することで、呼び出し方を強制したり、複数の要素を受け...

戻り値・返り値

戻り値を定義することで、呼び出し元に値を返すことができます。戻り値は、returnキーワードを使って定義します。

def 関数名():
    return 返す値

returnはいくつでも記述可能です。if文で処理を分岐した時などに使います。

def 関数名():
    if 条件式:
        return Trueの時に返す値
    else:
        return Falseの時に返す値

関数はreturnが処理されたらそこで終了します。なので、returnを記述する場所には注意しましょう。

def 関数名():
    print('関数開始')
    return
    print('関数終了')  # このprint()は処理されません

1つのreturnで複数の値を返すことができます。カンマ(,)で区切って値を記述することで複数の値をタプルとして返すことができます。

def 関数名():
    return 値1, 値2, ..., 値N

サンプル

関数に戻り値を定義して、呼び出し元で受け取ってみます。

# 戻り値を返す関数
def add(x, y):
    return x + y

# result変数にadd関数の戻り値を代入
result = add(1, 2)
print(result)

# 関数にそのまま渡すこともできる
print(add(13, 54))

実行結果

3
67

型アノテーション

引数と戻り値に型を指定することができます。ただし、異なる型の値が渡されたとしてもエラーを発生させるような強制力はありません。

引数の型アノテーションは、引数名と型名を:で区切って記述します。

def 関数名(引数名: 型名):
    何かしらの処理

# 引数に初期値が定義されている場合
def 関数名(引数名: 型名=初期値):
    何かしらの処理

戻り値の型アノテーションは、->を使って記述します。

def 関数名() -> 型名:
    何かしらの処理

サンプル

試しに型アノテーションを定義した関数を使ってみましょう!

def func(val: int) -> float:
    return val / 2


print(func(187))

実行結果

93.5

使っているエディタによっては、型アノテーションで定義した型を関数呼び出し時に表示してくれたりします。

※ ちなみに、Visual Studio Codeを使っています

【Python】型ヒントで使用する型を指定しよう【アノテーション】この記事では、Pythonで型ヒントを付ける方法を解説します。型ヒントを付けることで、そのオブジェクトがなんの型の値を使用するかわかるようになり、他の型の値を渡す危険性が少なくなります。また、mypyを使うことで型ヒントに沿ったコードが書けているか確認することができます。それでは、型ヒントの使い方を見ていきましょう!...

まとめ

この記事では、Pythonの関数の使い方を解説しました。

今回のおさらい

以下の関数は、今回の記事の内容をほぼ全て盛り込んだ関数です。どこに何が使われているか確認しておさらいしてみてください。

def func(*args, arg: int=1, **kwargs) -> str: 
    print(args)
    print(arg)
    print(kwargs)
    return '戻り値1', '戻り値2'

val1, val2 = func(1, 2, 3, key1='value1', key2='value2')

print(val1, val2)

実行結果

(1, 2, 3)
1
{'key1': 'value1', 'key2': 'value2'}
戻り値1 戻り値2

それでは今回の内容はここまでです!ではまたどこかで〜( ・∀・)ノ

最短3か月でエンジニア転職『DMM WEBCAMP COMMIT』