Pythonの関数入門:定義・呼び出し・引数と戻り値の基本

プログラミングにおいて「関数」は、コードを整理し、再利用性を高めるための重要な仕組みです。

本記事では、Python初心者向けに関数の定義方法から呼び出し、引数と戻り値の扱い方まで、具体例を交えてわかりやすく解説します。

最後には演習問題と解答例も用意していますので、ぜひ手を動かしながら理解を深めてください。


関数の定義(def)

関数とは「一定の処理をまとめて名前を付けたもの」です。

何度も使いたい処理を関数として定義しておくことで、コードの再利用性が向上し、可読性も高まります。

Pythonで関数を定義するには、defキーワードを使います。基本の書式は次のとおりです。

def 関数名(引数1, 引数2, ...):
    """関数のドキュメンテーション文字列(省略可)"""
    処理1
    処理2
    ...
    return 戻り値
  • 関数名 は英字・数字・アンダースコアで命名し、数字から始めてはいけません。
  • 引数 はカンマで区切って複数指定できます。引数が不要なら空の括弧 () でもOK。
  • return を省略すると、戻り値は自動的に None になります。
def greet():
    print("Hello, Python!")

上記のように引数なしでも定義できます。


関数の呼び出し

定義した関数を使うには、関数名と括弧を組み合わせて呼び出します。

greet()  # Hello, Python! と出力される

引数がある場合は、括弧内に値を渡します。

def greet_name(name):
    print(f"Hello, {name}!")

greet_name("Alice")  # Hello, Alice!
呼び出し時の注意点
  • 引数の数と順序は関数定義と合わせること
  • キーワード引数(name=”Bob”)も使える

引数の基本

位置引数(Positional Arguments)

呼び出し時に順序どおり渡す引数。最も基本的な方法です。

def add(a, b):
    return a + b

result = add(3, 5)  # 8

キーワード引数(Keyword Arguments)

名前を指定して渡すことで順序を自由にできます。

result = add(b=5, a=3)  # 8

デフォルト引数(Default Arguments)

あらかじめデフォルト値を設定しておくことで、呼び出し時に省略可能にできます。

def power(base, exponent=2):
    return base ** exponent

print(power(4))     # 4**2 = 16
print(power(2, 3))  # 2**3 = 8

可変長引数

引数の個数が呼び出しごとに異なる場合、*args や **kwargs を使います。

*argsは、位置引数をタプルとして受け取り、**kwargsは、キーワード引数を辞書として受け取ります。

def sum_all(*args):
    total = 0
    for num in args:
        total += num
    return total

print(sum_all(1, 2, 3, 4))  # 10

def print_info(**kwargs):
    for key, value in kwargs.items():
        print(f"{key}: {value}")

print_info(name="Alice", age=30)

戻り値(return)

関数は処理結果を戻り値として返せます。複数の値を返す場合はタプルとしてまとめられます。

def divide(a, b):
    quotient = a // b
    remainder = a % b
    return quotient, remainder

q, r = divide(7, 3)
print(f"商: {q}, 余り: {r}")  # 商: 2, 余り: 1

戻り値が不要なら return 自体を省略できますが、処理終了を明示するために return None と書くこともあります。


ドキュメンテーション文字列(Docstring)

関数の使い方や引数・戻り値の説明は、三重引用符で囲んだ文字列(Docstring)に記載します。IDEや help() で参照可能です。

def greet(name):
    """名前を受け取って挨拶を表示する関数

    Args:
        name (str): 挨拶する相手の名前

    Returns:
        None
    """
    print(f"Hello, {name}!")

演習問題

以下の演習問題に取り組んでみましょう。実際にコードを書いて動作を確認してください。

問題1

整数 n を受け取り、1 から n までの整数の和を返す関数 sum_to_n(n) を定義してください。

問題2

リストを受け取り、要素を逆順にした新しいリストを返す関数 reverse_list(lst) を定義してください。元のリストは変更しないこと。

問題3

キーワード引数で渡された任意のキーと値のペアを、次の形式で1行ずつ表示する関数 display_kwargs(**kwargs) を定義してください。

キー: 値

解答例

# 問題1
def sum_to_n(n):
    """1 から n までの和を返す"""
    total = 0
    for i in range(1, n + 1):
        total += i
    return total

print(sum_to_n(10))  # 55

# 問題2
def reverse_list(lst):
    """リストを逆順にして返す"""
    return lst[::-1]

original = [1, 2, 3, 4]
reversed_list = reverse_list(original)
print(reversed_list)  # [4, 3, 2, 1]
print(original)       # [1, 2, 3, 4]

# 問題3
def display_kwargs(**kwargs):
    """渡されたキーワード引数をキー: 値 の形式で表示"""
    for key, value in kwargs.items():
        print(f"{key}: {value}")

display_kwargs(name="Alice", age=30, country="Japan")
# 実行結果:
# name: Alice
# age: 30
# country: Japan

まとめ

  • 関数の定義:def キーワードと return を使って整理された処理をまとめる
  • 呼び出し:関数名+括弧で実行。引数の数・順序に注意
  • 引数の種類:位置引数、キーワード引数、デフォルト引数、可変長引数
  • 戻り値:return で値を返す。複数値はタプル
  • Docstring:関数の説明を記述し、可読性・保守性を向上

関数をマスターすると、コードが読みやすくなり、再利用性も高まります。まずは基本を押さえて、実際に手を動かしてみましょう!