チュートリアル

Python基礎構文:関数

Python入門関数def
広告エリア

はじめに

Python基礎構文シリーズ第4回は「関数」です。コードを再利用可能な単位にまとめる方法を学びます。

関数とは

関数は、特定の処理をまとめて名前をつけたものです。同じ処理を何度も書く代わりに、関数を呼び出すことで再利用できます。

基本的な関数定義

def greet():
    print("こんにちは!")

# 関数の呼び出し
greet()  # こんにちは!
greet()  # こんにちは!

引数を受け取る関数

def greet(name):
    print(f"こんにちは、{name}さん!")

greet("太郎")  # こんにちは、太郎さん!
greet("花子")  # こんにちは、花子さん!

複数の引数

def introduce(name, age):
    print(f"{name}さんは{age}歳です")

introduce("太郎", 25)  # 太郎さんは25歳です

戻り値のある関数

return で値を返します。

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

result = add(3, 5)
print(result)  # 8

# 直接使用することも可能
print(add(10, 20))  # 30

複数の戻り値

タプルで複数の値を返すことができます。

def get_min_max(numbers):
    return min(numbers), max(numbers)

minimum, maximum = get_min_max([3, 1, 4, 1, 5, 9, 2, 6])
print(f"最小: {minimum}, 最大: {maximum}")  # 最小: 1, 最大: 9

早期リターン

条件によって早めに関数を終了できます。

def divide(a, b):
    if b == 0:
        return None  # ゼロ除算を防ぐ
    return a / b

print(divide(10, 2))  # 5.0
print(divide(10, 0))  # None

デフォルト引数

引数にデフォルト値を設定できます。

def greet(name, greeting="こんにちは"):
    print(f"{greeting}{name}さん!")

greet("太郎")                    # こんにちは、太郎さん!
greet("太郎", "おはよう")         # おはよう、太郎さん!

注意: デフォルト引数は、デフォルト値のない引数の後に配置する必要があります。

# OK
def func(a, b=10):
    pass

# NG(エラーになる)
# def func(a=10, b):
#     pass

キーワード引数

引数名を指定して渡すことができます。

def create_user(name, age, city):
    return {"name": name, "age": age, "city": city}

# 位置引数
user1 = create_user("太郎", 25, "東京")

# キーワード引数(順序を変えられる)
user2 = create_user(city="大阪", name="花子", age=22)

print(user2)  # {'name': '花子', 'age': 22, 'city': '大阪'}

可変長引数

*args(位置引数の可変長)

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

print(sum_all(1, 2, 3))        # 6
print(sum_all(1, 2, 3, 4, 5))  # 15

**kwargs(キーワード引数の可変長)

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

print_info(name="太郎", age=25, city="東京")
# name: 太郎
# age: 25
# city: 東京

組み合わせ

def func(a, b, *args, **kwargs):
    print(f"a: {a}")
    print(f"b: {b}")
    print(f"args: {args}")
    print(f"kwargs: {kwargs}")

func(1, 2, 3, 4, 5, x=10, y=20)
# a: 1
# b: 2
# args: (3, 4, 5)
# kwargs: {'x': 10, 'y': 20}

ラムダ式(無名関数)

1行で書ける簡単な関数です。

# 通常の関数
def double(x):
    return x * 2

# ラムダ式
double = lambda x: x * 2

print(double(5))  # 10

ラムダ式の活用例

# ソートのキー関数
users = [
    {"name": "太郎", "age": 25},
    {"name": "花子", "age": 22},
    {"name": "次郎", "age": 30},
]

# 年齢でソート
sorted_users = sorted(users, key=lambda u: u["age"])
print(sorted_users)

# filter関数と組み合わせ
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
evens = list(filter(lambda x: x % 2 == 0, numbers))
print(evens)  # [2, 4, 6, 8, 10]

# map関数と組み合わせ
squares = list(map(lambda x: x ** 2, numbers))
print(squares)  # [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

型ヒント

引数と戻り値の型を明示できます(実行時には強制されません)。

def add(a: int, b: int) -> int:
    return a + b

def greet(name: str) -> str:
    return f"Hello, {name}!"

def get_user(id: int) -> dict | None:
    # ユーザーを検索して返す
    pass

ドキュメント文字列(docstring)

関数の説明を記述できます。

def calculate_area(width: float, height: float) -> float:
    """
    長方形の面積を計算します。

    Args:
        width: 幅
        height: 高さ

    Returns:
        面積(width * height)
    """
    return width * height

# ドキュメントを確認
help(calculate_area)

スコープ(変数の有効範囲)

global_var = "グローバル変数"

def func():
    local_var = "ローカル変数"
    print(global_var)  # アクセス可能
    print(local_var)   # アクセス可能

func()
print(global_var)  # アクセス可能
# print(local_var)  # エラー: 関数外からはアクセス不可

globalキーワード

counter = 0

def increment():
    global counter  # グローバル変数を変更する宣言
    counter += 1

increment()
increment()
print(counter)  # 2

再帰関数

関数が自分自身を呼び出す手法です。

def factorial(n):
    if n <= 1:
        return 1
    return n * factorial(n - 1)

print(factorial(5))  # 120 (5 * 4 * 3 * 2 * 1)
# フィボナッチ数列
def fibonacci(n):
    if n <= 1:
        return n
    return fibonacci(n - 1) + fibonacci(n - 2)

for i in range(10):
    print(fibonacci(i), end=" ")
# 0 1 1 2 3 5 8 13 21 34

まとめ

  • def 関数名(): で関数を定義
  • return で値を返す
  • デフォルト引数: def func(a, b=10)
  • 可変長引数: *args, **kwargs
  • ラムダ式: lambda x: x * 2
  • 型ヒント: def func(x: int) -> int:
  • ドキュメント文字列でコードを説明

次回は「リストと辞書」について学びます。

広告エリア