Python 関数の定義

ここでは Python のユーザー定義関数の定義と引数についてご説明します。

Python のユーザー定義関数を定義する

Python で関数を定義するには、def というキーワードを使って、次のように定義します。

def 関数名(引数1, 引数2, ...):
    関数のコードブロック
    ...
    return 戻り値

引数と戻り値は必要なければ、なくて大丈夫です。

関数を定義しただけでは、その中のコードは実行されず、呼び出されて初めて関数のコードが実行されます。

ユーザー定義関数を呼び出す方法は組み込み関数と同じで、関数名(引数) で呼び出せます。


まずは引数のない、Hello! という文字列を出力するだけのシンプルな greet という関数を定義して呼び出してみましょう。

def greet():
    print("Hello!")

greet()

実行結果は次のようになります。 4 行目の greet() でユーザー定義関数が呼び出され、print("Hello!") が実行されます。

Hello!

Python ユーザー定義関数の引数

先ほどは、引数の無いユーザー関数を定義して、呼び出してみましたが、今度はユーザー定義関数に引数を渡してみましょう。

greet() 関数に first_name と last_name という引数を追加して、それを出力するように変更すると次のようになります。

def greet(frist_name, last_name):
    print(f"Hello! I'm {frist_name} {last_name}.")

greet("Jun", "Sasaki")
greet("Ryo", "Tanaka")

実行結果は次のようになります。引数は呼び側が並べた順番で関数側の変数に代入されます。渡した引数の値によって、出力される名前が変わっていますね。

Hello! I'm Jun Sasaki.
Hello! I'm Ryo Tanaka.

key=value のようにキーワードを指定して引数を渡すこともでき、その時は関数の定義と引数の順番は違っても大丈夫です。

def greet(frist_name, last_name):
    print(f"Hello! I'm {frist_name} {last_name}.")

greet(last_name = "Sasaki", frist_name = "Jun")
greet(last_name = "Tanaka", frist_name = "Ryo")

実行結果は先ほどと同じです。

Hello! I'm Jun Sasaki.
Hello! I'm Ryo Tanaka.

ユーザー定義関数の引数のデフォルト値

ユーザー定義関数で定義した引数は必須で、呼び出す時に値を渡さないとエラーになります。

関数を定義する時に引数にデフォルトの値を指定しておくことによって、関数を呼び出す時にその引数を省略することも可能です。

その時、デフォルト値を指定した引数から右側で定義されている引数は全てデフォルト値を指定しなければいけません。


例えば、4 つの値を受け取って足すだけの関数を定義して、3つ目と4つ目の引数のデフォルト値を 0 にしてみましょう。

def add(value1, value2, value3 = 0, value4 = 0):
    print(value1 + value2 + value3 + value4)

add(1, 2)
add(1, 2, 3)
add(1, 2, 3, 4)

実行結果は次のようになり、add() を呼ぶ時に、引数を4つ渡さなくてもエラーならず、渡さなかった引数は 0 として計算されていますね。

3
6
10

ユーザー定義関数の可変長引数

引数の数が何個になるかわからない時には、引数の前に * をつけることによって、引数の数を可変にすることができます。

* をつけると、引数を tuple 型として受け取り、インデックスを指定したり、ループをしたりすることによって、受け取ったそれぞれの引数が使えます。


例えば、引数で渡した数字を全て足して合計を出力するには、次のようにします。

def add(*values):
    total = 0
    for v in values:
        total += v
    print(f"Total: {total}")

add(1, 2, 3)
add(1, 2, 3, 4, 5)

実行結果は次のようになります。 引数が何個あっても数字である限りエラーにはならず、合計を計算して出力します。

Total: 6
Total: 15

* の変わりに ** を使って、可変長のキーワード引数を渡すこともできます。

** を使うと引数は辞書として受け取られ、キーと値のペアとして受け取った引数が使えます。


例えば、key=value で渡されたオプションを出力する関数は次のようになります。

def print_options(**options):
    for key, value in options.items():
        print(f"{key} = {value}")

print_options(option1 = 10, option2 = "test", option3 = True)
print("--------------")
print_options(opt1 = "ABC", opt2 = 2)

実行結果は次のようになります。

option1 = 10
option2 = test
option3 = True
--------------
opt1 = ABC
opt2 = 2

ユーザー定義関数の戻り値

ユーザー定義関数から戻り値を返すには、return 文を使います。

例えば、先ほど引数で渡した数字を全て足して合計を出力した関数を、合計を戻り値として返すように変更すると次のようになります。

def add(*values):
    total = 0
    for v in values:
        total += v    
    return total

total = add(1, 2, 3, 4, 5)
print(f"Total: {total}")

実行結果は次のようになり、add() 関数が total を戻り値として返しているのがわかりますね。

Total: 15

以上、Python のユーザー定義関数の定義と引数についてご説明しました。

© 2024 やさしい Python 入門