関数とは?:def文の基本#

はじめに#

今回からは、Pythonプログラミングをさらに効率的にするための「関数」について学んでいきましょう。

関数は、プログラミングの中で最も重要な概念の一つです。特に大きなプログラムになればなるほど、関数の役割は重要になります。この記事では、関数の基本的な考え方と、Pythonでの関数の定義方法について学びます。

関数とは?#

関数とは、一連の処理をひとまとめにして名前を付け、必要なときに呼び出せるようにしたものです。これまでに使ってきたprint()len()なども関数です。

関数を使うと次のようなメリットがあります。

  1. コードの再利用: 同じ処理を何度も書く代わりに、一度定義した関数を何度でも呼び出せます
  2. コードの整理: 処理をまとまりごとに分けることで、プログラム全体が整理されます
  3. バグ修正の容易さ: プログラムに問題が発生したときに、関数単位で確認できるため、問題箇所を特定しやすくなります
  4. チーム開発の効率化: 機能ごとに担当者を分けて開発できます

関数の基本構造#

Pythonでは、defキーワードを使って関数を定義します。基本的な構造は次のとおりです。

def 関数名(引数1, 引数2, ...):
    処理内容
    return 戻り値

引数と戻り値は省略することもできます。それぞれ次回詳しく説明します。

それでは、具体的な例を見ていきましょう。次のコードを実行してみてください。

>
# シンプルな関数の定義
def greet():
    print("こんにちは!関数の世界へようこそ。")

# 関数の呼び出し
greet()
こんにちは!関数の世界へようこそ。

この例では、greet()という名前の関数を定義しています。この関数は呼び出されると、メッセージを表示します。関数を定義しただけでは処理は実行されず、greet()のように関数名と括弧を使って呼び出すことで、関数内の処理が実行されます。

関数の命名規則#

関数名の付け方にはいくつかのルールがあります。

  1. 使える文字:
    • アルファベット(A-Z, a-z)
    • 数字(0-9)
      • ただし、数字で始めることはできない
    • アンダースコア(_)
    • 日本語も使えるが、英語を使うことが一般的
  2. 命名スタイル:
    • Pythonでは、「スネークケース」(単語をアンダースコア _ でつなぐ方式)が一般的
    • 例: calculate_area, print_summary, get_user_data
  3. 命名の意味:
    • 関数名は、その関数が何をするのかを明確に示す動詞を使うことが一般的
    • 例: calculate_..., get_..., print_..., update_...

適切な関数名を付けることで、コードの可読性(読みやすさ)と保守性(メンテナンスのしやすさ)が向上します。

>
# 良い関数名の例
def calculate_total_price(price, quantity, tax_rate):
    return price * quantity * (1 + tax_rate)

# 避けるべき関数名の例
def func1(p, q, t):  # 短すぎて何をする関数か分かりにくい
    return p * q * (1 + t)

インデントの重要性#

Pythonの関数定義では、インデント(字下げ)が非常に重要です。関数内のすべてのコードは、同じレベル(スペースの数)でインデントされている必要があります。

>
# 正しいインデント
def example_function():
    print("これは関数内の処理です。")
    print("この行も関数内です。")

print("この行は関数の外です。")

インデントはif文などと同様に半角スペース4つを使用することが多いです。Pythonでは、このインデントによってコードブロック(関数の範囲など)を判断するため、適切なインデントは非常に重要です。

実用的な関数の例#

より実用的な関数の例をいくつか見てみましょう。

>
import datetime
import random

# 引数なしの関数 - 現在の日付を表示する
def show_today():
    today = datetime.datetime.now()
    print(f"今日の日付: {today.year}{today.month}{today.day}日")

# 引数なしの関数 - ランダムな数を生成する
def generate_random_number():
    return random.randint(1, 100)

# 関数を使ってみる
show_today()  # 引数なしの関数を呼び出し

random_num = generate_random_number()  # 戻り値がある引数なしの関数
print(f"生成された乱数: {random_num}")

random_num = generate_random_number()  # 再度呼び出し
print(f"再度生成された乱数: {random_num}")

実行結果(日付と乱数は実行時によって異なります):

今日の日付: 2025年5月1日
生成された乱数: 42
再度生成された乱数: 87

datatimeモジュールは日付や時間を扱うためのモジュールで、randomモジュールは乱数(ランダムな数)を生成するためのモジュールです。以前に紹介したmathモジュールと同様に、Pythonの標準ライブラリに含まれています。

作成した関数は、必要なときに何度でも呼び出すことができます。これにより、同じ処理を何度も書く必要がなくなり、コードがすっきりします。

まとめ#

この記事では、関数の基本について学びました。

  • 関数とは、一連の処理をひとまとめにして名前を付け、必要なときに呼び出せるようにしたもの
  • defキーワードを使って関数を定義する
  • 適切な命名とインデントが重要

関数は、コードの再利用性、保守性、可読性を高める上で非常に重要な概念です。小さな関数から始めて、徐々に複雑な関数にチャレンジしていくと良いでしょう。