Python:関数ってなに?(def、引数、戻り値)の解説
音声
目次
関数の基本と今回できること
今回できるようになることは、関数の定義(def)、引数の渡し方、戻り値の受け取り方を理解して、簡単な関数を作って呼び出せるようになることです。
関数は「処理のまとまり」です。重複を減らし、読みやすく再利用できる形にするために使います。
Pythonではdefで関数名を定義して、丸かっこ内に引数を書きます。処理の結果を返したいときはreturnを使います。
引数には位置引数、キーワード引数、デフォルト値があります。可変長引数(*args、**kwargs)は応用として扱います。
関数名を分かりやすくして処理を短く保つことが、読みやすさのポイントです。
最小コードと実行方法
最小コードです。
# functions_demo.py
def add(a, b):
return a + b
def greet(name="ユーザー"):
"""名前を受け取り挨拶文字列を返します"""
return f"こんにちは、{name}さん"
def stats(nums):
if not nums:
return None
return {"count": len(nums), "sum": sum(nums)}
if __name__ == "__main__":
print(add(2, 3))
print(greet("太郎"))
print(stats([1, 2, 3]))
このコードは3つの関数を定義し、ファイルを直接実行したときに呼び出します。数値の足し算と挨拶、リストの集計結果を返す例です。
実行方法です。
python functions_demo.py
またはVSCodeでファイルを開き、右上の「Run Python File」ボタンから実行します。
出力例です。
5
こんにちは、太郎さん
{'count': 3, 'sum': 6}
引数・戻り値の使い方と確認の流れ
引数は入力で、戻り値は出力です。位置引数は順序で渡し、キーワード引数は名前で指定できます。戻り値を受け取るには、変数に代入して扱います。
確認の流れは次のとおりです。
- 関数呼び出し結果を
printで出力します。 - 途中で戻り値の型を確認するには、
print(type(var))を使います。 listやdictの途中結果は、printで中身を確認します。- ログが必要なら、
loggingモジュールを使って出力レベルを分けます。
よくあるミスとして、戻り値を返し忘れてNoneになってしまうことがあります。原因はreturnを書き忘れていることが多いので、処理の最後にreturnで値を返すようにします。
def add(a, b):
result = a + b
return result
x = add(2, 3)
print(x) # 5
TypeErrorが出る場合は、引数の型が想定と合っているかを確認します。必要なら型変換を入れるか、型ヒントを追加して意図を明確にします。
def repeat(text: str, n: int) -> str:
return text * n
n = int("3")
print(repeat("a", n)) # aaa
デバッグと1段ステップアップ(使い分けの基準)
デバッグの見方(print / logging / 変数の確認)は短時間で状態を把握できます。
printは簡単に使えますが、複雑な処理や本番環境ではloggingを使うと、ログレベルで情報量を調整できて運用に向きます。
IDEではブレークポイントを置き、ステップ実行しながら変数の値を確認できます。
さらに1段ステップアップとして例外処理を追加すると、想定外の入力でも止まりにくくなり堅牢になります。例です。
def safe_div(a, b):
try:
return a / b
except ZeroDivisionError:
return None
使い分けの基準として、出力をすぐ確認したいときはprint、運用で追跡するならlogging、原因特定はブレークポイントと組み合わせるのが要チェックです。
注意(ここだけ)
デフォルト引数に可変オブジェクト(例:list、dict)を使うと、関数を呼び出すたびに同じオブジェクトが使い回されて値が保持されるため、意図しない結果になりやすいです。
- 回避するにはデフォルト値を
Noneにして、関数内で新しいオブジェクトを作成する書き方にするのが要チェックです。
def add_item(item, items=None):
if items is None:
items = []
items.append(item)
return items
要約
- 関数は処理をまとめる仕組みで、
defで定義しreturnで値を返せます。 - 引数には位置引数・キーワード引数・デフォルト引数があり、可変長引数は応用として使えます。
- 最小コードを実行し、
printやtypeで途中確認すると理解が早まります。 - デバッグは
print→logging→ブレークポイントの順で使い分けると効率的です。 - 詰まりどころは「
returnの書き忘れ」と「デフォルト引数に可変オブジェクトを使うこと」で、どちらも避けたい例です。