Python関数をマスターする:定義、呼び出し、インデント、引数、戻り値
Python関数をマスターする:定義、呼び出し、インデント、引数、戻り値
関数はあらゆるPythonアプリケーションの構成要素です。再利用可能なロジックをカプセル化し、コードをDRY(Don't Repeat Yourself)に保ち、プログラムの可読性、テスト容易性、保守性を高めます。このガイドでは、Python 3で関数を書き、呼び出し、トラブルシューティングするために必要なすべてのステップを解説し、Python 2との違いにも触れます。
Pythonにおける関数とは?
Python関数は、呼び出されたときに実行される自己完結型のコードブロックです。単一の明確なタスクを実行し、必要な場所で再利用できるミニプログラムと考えるとわかりやすいでしょう。Pythonには多数の組み込み関数(print()、input()など)が用意されていますが、独自の関数を作成することで、コードに進化と拡張の力を与えることができます。
関数の定義と呼び出し
関数はdefキーワードで宣言し、続けて関数名と括弧で囲んだパラメータリストを記述します。関数の本体はコロンで始まり、インデントする必要があります。
def greet():
print("Hello, Python!")
# 関数を呼び出す
greet()
出力: Hello, Python!
インデントが重要な理由
Pythonはブレースや明示的なbegin/end文を使用しません。代わりに、インデントでスコープを定義します。関数、ループ、条件分岐など、すべてのコードブロックは一貫したインデントレベルを共有しなければなりません。
- 関数定義の後には、最低1レベルのインデント(通常はスペース4つ)が必要です。
- その関数内のすべての文は、同じインデントを使用しなければなりません。
- タブとスペースの混在、またはインデント深さの不一致は
IndentationErrorを引き起こします。
正しいインデントの例:
def demo():
print("Line 1")
print("Line 2")
よくある間違い:
def demo():
print("Oops")
これは以下のエラーになります: IndentationError: expected an indented block
return文の使用
returnキーワードは値を呼び出し元に返します。関数がreturnに到達せずに終了した場合、暗黙的にNoneが返されます。
def square(x):
return x * x
print(square(4)) # 16
returnなしの場合:
def square(x):
x * x
print(square(4)) # None
また、関数オブジェクト自体を出力(例: print(square))すると、そのメモリアドレスが表示されますが、アプリケーションコードではほとんど役立ちません。
関数への引数渡し
引数は関数が動作するために必要なデータを供給します。パラメータは関数シグネチャで定義されるプレースホルダーです。
def multiply(x, y=1):
return x * y
print(multiply(4)) # 4 (yはデフォルトで1)
print(multiply(4, 2)) # 8
print(multiply(y=3, x=2)) # 6 (キーワード引数で順序を変更可能)
可変長引数(*argsと**kwargs)
任意の数の引数を受け取る関数が必要な場合があります。位置引数には*args、キーワード引数には**kwargsを使用します。
def summarize(*values, **options):
total = sum(values)
print(f"Total: {total}")
if options.get("show_details"):
print("Values:", values)
summarize(1, 2, 3, 4, 5, show_details=True)
Python 2とPython 3の主な違い
- print構文: Python 2では
print "text"、Python 3ではprint("text") - 関数のオーバーロード(同じ名前で複数のシグネチャ)はPython 2ではサポートされていませんが、Python 3では
functools.singledispatchや引数型の検査により可能です。 - 整数除算:
5/2はPython 2で2、Python 3で2.5になります(両バージョンで床除算には//を使用)。
関数設計のベストプラクティス
- 関数を集中させる: 1つの関数は1つの明確なタスクを実行すべきです。
- 関数内部の最初の行にdocstringでドキュメント化します。
def add(a, b): """aとbの合計を返す。""" return a + b - 型ヒント(Python 3.5+)を使用して、期待される引数の型と戻り値の型を明確にします。
def add(a: int, b: int) -> int: return a + b - オプションのパラメータにはキーワード引数を推奨し、可読性を高めます。
総合的な例
# 包括的なPython 3スクリプトの例
def greet():
"""フレンドリーな挨拶を出力する。"""
print("Hello, Python!")
def square(x: int) -> int:
"""xの2乗を返す。"""
return x * x
def multiply(x: int, y: int = 1) -> int:
"""xとyの積を返す。yのデフォルトは1。"""
return x * y
# デモンストレーション
if __name__ == "__main__":
greet()
print(square(4)) # 16
print(multiply(4)) # 4
print(multiply(4, 2)) # 8
print(multiply(y=2, x=4)) # 8
詳細については、公式Pythonドキュメントの関数定義を参照してください。
Python
- C++関数を実例で徹底解説:基本から応用まで
- Python 文・インデント・コメント: 明確なガイド
- Python 関数引数完全マスター: 位置引数・キーワード引数・デフォルト引数
- Python ラムダ関数: 無名関数の実践ガイド
- Pythonジェネレータ:効率的イテレーションと高度なユースケース
- Pythonクロージャ解説:ネスト関数が変数を捕捉する仕組み
- Pythonデコレータマスター:エキスパート技法で関数を拡張
- Pythonラムダ関数をマスターする:実例とベストプラクティス
- Python abs()関数:数値と複素数の絶対値を計算
- Python round()関数を実例で徹底解説
- Python range()関数をマスター:基礎から応用まで