【Python入門】関数の基礎を徹底解説!初心者でも分かる使い方とメリット

Pythonプログラミングを学ぶ上で、関数は避けて通れない重要な概念です。関数を理解することで、コードの再利用性が高まり、プログラム全体の見通しが良くなります。本記事では、Python初心者の方に向けて、関数の基礎から実践的な使い方まで、丁寧に解説していきます。

関数とは何か?

関数とは、特定の処理をひとまとまりにして名前を付けたものです。料理のレシピに例えると分かりやすいでしょう。カレーを作るレシピがあれば、毎回一から手順を考える必要がなく、「カレーを作る」という一つの指示で複雑な調理工程を実行できます。プログラミングにおける関数も同じで、複数の処理をまとめて名前を付けることで、何度でも簡単に呼び出すことができるのです。

関数を使わずにプログラムを書くと、同じコードを何度も書く必要が出てきます。これは非効率的なだけでなく、修正が必要になった際に、すべての箇所を直さなければならないという問題も生じます。関数を使えば、一箇所を修正するだけで、その関数を呼び出しているすべての場所に変更が反映されます。

Pythonで関数を定義する基本構文

Pythonで関数を定義するには、defキーワードを使います。基本的な構文は以下の通りです。

def greet():
    print("こんにちは!")
    print("Pythonの世界へようこそ!")

# 関数の呼び出し
greet()
この例では、greetという名前の関数を定義しています。関数名の後には必ず括弧()を付け、その後にコロン:を記述します。関数の中身(実行される処理)は、インデント(字下げ)を使って記述するのがPythonのルールです。

関数を定義しただけでは処理は実行されません。実際に関数を実行するには、関数名に括弧を付けて呼び出す必要があります。上記の例ではgreet()と記述することで、関数内の処理が実行されます。

引数(パラメータ)を使った関数

関数をより柔軟に使うために、引数という仕組みがあります。引数とは、関数に渡す情報のことです。これにより、同じ関数でも異なる結果を得ることができます。

def greet_person(name):
    print(f"{name}さん、こんにちは!")
    print("今日も良い一日を!")

greet_person("太郎")
greet_person("花子")
この例では、nameという引数を受け取る関数を定義しています。関数を呼び出す際に具体的な値を渡すことで、その値が関数内で使用されます。同じ関数でも、渡す値を変えることで異なるメッセージを表示できるのです。

引数は複数指定することも可能です。複数の引数を使うことで、より複雑な処理を柔軟に行えます。

def calculate_rectangle_area(width, height):
    area = width * height
    print(f"幅{width}cm、高さ{height}cmの長方形の面積は{area}平方cmです")

calculate_rectangle_area(5, 10)
calculate_rectangle_area(8, 3)
この関数は、幅と高さという2つの引数を受け取り、長方形の面積を計算して表示します。引数の順番は重要で、最初に渡した値がwidthに、2番目に渡した値がheightに対応します。

戻り値(返り値)を持つ関数

これまでの例では、関数は結果を画面に表示していました。しかし、実際のプログラミングでは、関数が計算結果を「返す」ことが多くあります。これを戻り値(または返り値)と呼びます。

戻り値を返すには、return文を使用します。return文を使うことで、関数の実行結果を呼び出し元で受け取り、さらに別の処理に使うことができます。

def add_numbers(a, b):
    result = a + b
    return result

sum_value = add_numbers(10, 20)
print(f"合計は{sum_value}です")

# 戻り値を直接別の計算に使用
total = add_numbers(5, 15) + add_numbers(8, 12)
print(f"総合計は{total}です")
この例では、add_numbers関数が2つの数値を足した結果を返しています。返された値は変数に代入したり、さらに別の計算に使用したりできます。これがprint文との大きな違いです。printは画面に表示するだけですが、returnは値を返すことで、その後の処理で活用できるのです。

デフォルト引数で関数をより便利に

引数には、デフォルト値を設定することができます。デフォルト値を設定しておくと、その引数を省略して関数を呼び出した場合に、自動的にデフォルト値が使用されます。

def create_profile(name, age, country="日本"):
    print(f"名前: {name}")
    print(f"年齢: {age}歳")
    print(f"出身国: {country}")

create_profile("山田太郎", 25)
create_profile("John Smith", 30, "アメリカ")
この例では、country引数にデフォルト値「日本」を設定しています。最初の呼び出しではcountryを指定していないため、デフォルト値の「日本」が使用されます。2回目の呼び出しでは明示的に「アメリカ」を指定しているため、その値が使用されます。

デフォルト引数を使用する際の重要なルールは、デフォルト値を持つ引数は、デフォルト値を持たない引数よりも後に配置しなければならないということです。これは構文エラーを防ぐための決まりです。

関数を使うメリット

1. コードの再利用性

同じ処理を何度も書く必要がなくなります。一度関数として定義すれば、プログラムのどこからでも呼び出せます。これにより、コードの量が減り、開発効率が向上します。

2. 保守性の向上

バグ修正や機能改善が必要になった場合、関数として定義されていれば一箇所を修正するだけで済みます。同じコードが複数箇所に散らばっている場合、すべてを見つけて修正する必要がありますが、関数化されていればその心配はありません。

3. 可読性の向上

適切な名前を付けた関数を使うことで、コードの意図が明確になります。長い処理を関数に分割することで、プログラム全体の構造が把握しやすくなり、他の開発者(または未来の自分)がコードを理解しやすくなります。

4. テストのしやすさ

関数として独立した処理は、単体でテストすることが容易です。各関数が正しく動作することを確認できれば、プログラム全体の品質も向上します。

5. チーム開発での効率化

大規模なプロジェクトでは、複数の開発者が協力してコードを書きます。機能を関数に分割することで、それぞれが担当する部分を明確に分けることができ、効率的な開発が可能になります。

実践的な関数の使い方

実際のプログラミングでは、複数の関数を組み合わせて使用することが多くあります。小さな関数を作り、それらを組み合わせて大きな機能を実現するのが良い設計とされています。

def validate_age(age):
    if age < 0:
        return False
    if age > 150:
        return False
    return True

def get_age_category(age):
    if not validate_age(age):
        return "無効な年齢"
    if age < 20:
        return "未成年"
    elif age < 65:
        return "成人"
    else:
        return "高齢者"

# 関数の組み合わせ使用
user_age = 25
if validate_age(user_age):
    category = get_age_category(user_age)
    print(f"{user_age}歳は{category}に分類されます")
この例では、年齢の妥当性を検証する関数と、年齢カテゴリを判定する関数を分けています。このように責務を分割することで、それぞれの関数がシンプルになり、理解しやすく、テストしやすくなります。

よくある初心者の疑問

Q: 関数名はどう付けるべき?

関数名は、その関数が何をするのかが分かるように付けることが重要です。英語の動詞で始めるのが一般的で、例えばcalculate_total(合計を計算する)、get_user_info(ユーザー情報を取得する)などです。日本語でも構いませんが、プロジェクトの方針に従いましょう。

Q: 1つの関数はどれくらいの長さにすべき?

一般的には、1つの関数は1つの責務を持つべきとされています。長すぎる関数は理解が難しくなるため、20行程度を目安に、それ以上になる場合は複数の関数に分割することを検討しましょう。

Q: いつ関数を作るべき?

同じコードを2回以上書いていると気付いたら、関数化を検討しましょう。また、複雑な処理を理解しやすくするために、意味のあるまとまりごとに関数に分割することも有効です。

まとめ

Python の関数は、効率的で保守性の高いプログラムを書くための基本的かつ強力なツールです。本記事で学んだ内容をまとめると以下のようになります。

  • 関数は処理をまとめて名前を付けたもので、コードの再利用を可能にします
  • defキーワードを使って関数を定義し、関数名に括弧を付けて呼び出します
  • 引数を使うことで、関数に情報を渡して柔軟な処理ができます
  • return文を使うことで、関数から値を返すことができます
  • デフォルト引数を設定することで、より使いやすい関数を作れます
  • 関数を使うことで、保守性、可読性、再利用性が向上します

関数の概念を理解し、積極的に使っていくことで、あなたのPythonプログラミングスキルは大きく向上するでしょう。最初は難しく感じるかもしれませんが、実際に手を動かして様々な関数を作ってみることが上達への近道です。小さな関数から始めて、徐々に複雑な関数にチャレンジしていきましょう。

「らくらくPython塾」が切り開く「呪文コーディング」とは?

■プロンプトだけでオリジナルアプリを開発・公開してみた!!

■初心者歓迎「AI駆動開発/生成AIエンジニアコース」はじめました!

テックジム東京本校で先行開始。

■テックジム東京本校

格安のプログラミングスクールといえば「テックジム」。
講義動画なし、教科書なし。「進捗管理とコーチング」で効率学習。
対面型でより早くスキル獲得、月額2万円のプログラミングスクールです。

<短期講習>5日で5万円の「Pythonミニキャンプ」開催中。

<オンライン無料>ゼロから始めるPython爆速講座