関数: 再利用可能なコード

def で定義。*args/**kwargs で柔軟に。

def
関数を定義するキーワード。
*args
可変長位置引数。
**kwargs
可変長キーワード引数。

関数基礎

料理のレシピカード (Recipe Card)

関数は「レシピカード」です。「材料(引数)」を渡すと、手順通りに調理して、「料理(戻り値)」を返してくれます。一度レシピを書いておけば、材料を変えるだけで何度でも同じ料理(処理)を作ることができます。

Pythonの関数は `def` で定義します。コードの重複を避けるための基本単位です。Pythonでは関数も「オブジェクト」として扱われるため、変数に入れたり、他の関数に渡したり(高階関数)できるのが特徴です。

Basic Functions
def greet(name: str) -> str:
"""挨拶を返す"""
return f"Hello, {name}!"
# デフォルト引数
def greet(name: str = "World") -> str:
return f"Hello, {name}!"
# キーワード引数
greet(name="Alice")
Bad
# ❌ Bad: 可変オブジェクトをデフォルトに
def add_item(item, items=[]):
items.append(item)
return items
add_item(1) # [1]
add_item(2) # [1, 2] 前回のが残ってる!
Good
# ✅ Good: None を使う
def add_item(item, items=None):
if items is None:
items = []
items.append(item)
return items

高度なパターン

args, kwargs, lambda
# *args と **kwargs
def flexible(*args, **kwargs):
print(args) # タプル
print(kwargs) # 辞書
flexible(1, 2, a=3, b=4)
# (1, 2)
# {'a': 3, 'b': 4}
# ラムダ(無名関数)
square = lambda x: x ** 2
# 関数を返す関数
def multiplier(n):
return lambda x: x * n
double = multiplier(2)
double(5) # 10
Tip: デフォルト引数に可変オブジェクト(リスト等)は使わない。

合格ライン

*args と **kwargs を使える
デフォルト引数の罠を知っている

演習課題

課題1: 関数定義
引数と戻り値を持つ関数を作成してください。
課題2: デフォルト引数
デフォルト引数の罠を避けて関数を作成してください。