Python入門

【Python入門】関数(def文)の使い方を完全解説|引数・return・デフォルト値まで

Pythonで関数(Function)を使いこなせると、コードの品質が一気に上がります。この記事では def 文によるPython関数の定義方法から、引数・デフォルト値・return文・スコープ・可変長引数まで、初心者が迷いやすいポイントを丁寧に解説します。

Pythonをシリーズで基礎から学んでいる方は、前回の 【Python入門】リスト・辞書などのコレクションを完全解説(Part 5) もあわせてご覧ください。順番に読み進めると理解がスムーズです!

関数(Function)とは?料理レシピで理解するイメージ

python function programming
python function programming / Photo by Myburgh Roux via Pexels

関数とは、特定の処理をひとまとまりにした再利用可能なコードのブロックです。同じ処理を何度も書く代わりに、一度関数として定義しておけば何度でも呼び出せます。

料理に例えると、「カレーの作り方」というレシピ(=関数の定義)を一度書いておけば、「今日もカレーを作って!」と呼び出すだけで毎回同じ手順を踏めますよね。レシピを毎回イチから書く必要はないわけです。

プログラミングではこれを DRY原則(Don’t Repeat Yourself) と呼びます。「同じことを繰り返すな」という考え方で、関数はその代表的な実現手段です。関数を使うと次のようなメリットがあります。

  • コードの再利用:同じ処理を何度も書かなくてOK
  • 可読性アップ:処理に名前がつくので読みやすくなる
  • メンテナンスが楽:修正は関数の中だけ変えればいい
  • デバッグしやすい:処理を分割することでバグの特定が早くなる

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

Pythonで関数を定義するには def キーワードを使います。「define(定義する)」の略です。基本的な書き方は次のとおりです。

# ▼ 関数の定義(レシピを書く)
def greet(name):
    message = f"こんにちは、{name}さん!"
    return message

# ▼ 関数の呼び出し(レシピを使う)
result = greet("田中")
print(result)   # → こんにちは、田中さん!

result2 = greet("鈴木")
print(result2)  # → こんにちは、鈴木さん!

たった一度 greet() を定義するだけで、何度でも違う名前で呼び出せます。これが関数の強みです。

def文の構文ルール:押さえておくべき4つのポイント

  • def 関数名(引数): で定義スタート(末尾のコロン : を忘れずに!)
  • インデント(字下げ)した部分が関数の中身になる(スペース4つが慣習)
  • return で呼び出し元に値を返す(省略すると None が返る)
  • ④ 関数名に () をつけることで呼び出せる

引数(Arguments)の使い方:関数への「入力」を理解しよう

引数とは、関数を呼び出すときに渡す「入力データ」のことです。電卓に例えると、「100 + 200」の 100と200が引数、計算結果の300が戻り値(return値)というイメージです。

複数の引数を受け取る関数

引数はカンマ区切りで複数受け取れます。

def introduce(name, age, hobby):
    return f"私は{name}です。{age}歳で、趣味は{hobby}です。"

print(introduce("田中", 25, "読書"))
# → 私は田中です。25歳で、趣味は読書です。

print(introduce("鈴木", 30, "登山"))
# → 私は鈴木です。30歳で、趣味は登山です。

キーワード引数(Keyword Arguments):順番を気にしなくていい!

引数名を明示して渡すと、順番を気にせずに呼び出せます。これをキーワード引数と呼びます。引数が多い関数を呼び出すときに特に便利です。

def introduce(name, age, hobby):
    return f"私は{name}です。{age}歳で、趣味は{hobby}です。"

# キーワード引数を使うと順番が違ってもOK
print(introduce(hobby="登山", name="鈴木", age=30))
# → 私は鈴木です。30歳で、趣味は登山です。

デフォルト値(Default Arguments):省略できる引数を作ろう

引数にデフォルト値を設定しておくと、呼び出し時にその引数を省略できます。よく使う値を事前に決めておきたいときに便利です。

def greet(name, greeting="こんにちは"):
    return f"{greeting}、{name}さん!"

print(greet("田中"))              # → こんにちは、田中さん!(デフォルト値が使われる)
print(greet("鈴木", "おはよう"))  # → おはよう、鈴木さん!(上書きされる)

⚠️ デフォルト値を持つ引数は、必ず通常の引数より後ろに書く必要があります。そうしないと SyntaxError になります。

# NG例:デフォルト値あり引数が先にある
# def greet(greeting="こんにちは", name):  # SyntaxError!

# OK例:デフォルト値あり引数は後ろに
def greet(name, greeting="こんにちは"):  # ✅ 正しい順番
    return f"{greeting}、{name}さん!"

return文の使い方:関数の「出力」を理解しよう

return 文は関数の処理結果を呼び出し元に返すための命令です。いくつかの重要なポイントを押さえておきましょう。

returnを省略すると「None」が返る

def say_hello(name):
    print(f"こんにちは、{name}さん!")  # printするだけ、returnなし

result = say_hello("田中")
# → こんにちは、田中さん!(printは実行される)

print(result)  # → None(returnがないのでNoneが返る)

複数の値をまとめて返す

Pythonでは return で複数の値をカンマ区切りで返せます。内部的にはタプルとして返されます。

def min_max(numbers):
    return min(numbers), max(numbers)  # 2つの値を返す

smallest, largest = min_max([3, 1, 4, 1, 5, 9, 2, 6])
print(f"最小値: {smallest}, 最大値: {largest}")
# → 最小値: 1, 最大値: 9

スコープ(Scope):変数の「有効範囲」を理解しよう

スコープとは、変数が使える範囲のことです。関数の中で作った変数は、関数の外からはアクセスできません。

def my_function():
    local_var = "私は関数内の変数です"  # ローカル変数
    print(local_var)  # → 関数内ではアクセスできる

my_function()
# print(local_var)  # → NameError! 関数の外からはアクセスできない

一方、関数の外で定義した変数(グローバル変数)は、関数の内側からも参照できます。ただし、関数内でグローバル変数を書き換えるには global キーワードが必要です。

count = 0  # グローバル変数

def increment():
    global count  # グローバル変数を書き換えることを宣言
    count += 1

increment()
increment()
print(count)  # → 2

💡 グローバル変数の多用はバグの原因になりやすいため、基本的には return で値を受け渡す設計を心がけましょう。

可変長引数(*args・**kwargs):引数の数が決まらないときに便利

引数の数があらかじめ決まらない場合は、可変長引数を使います。*args**kwargs の2種類があります。それぞれの詳しい使い方は専用の解説記事をご覧ください。

  • 📄 【Python】*args(可変長位置引数)の使い方を徹底解説
  • 📄 【Python】**kwargs(可変長キーワード引数)の使い方を徹底解説

ここでは基本的な使い方のみ紹介します。

*args:任意の数の位置引数を受け取る

def total(*args):
    return sum(args)  # argsはタプルとして受け取られる

print(total(1, 2, 3))        # → 6
print(total(10, 20, 30, 40)) # → 100

**kwargs:任意の数のキーワード引数を受け取る

def show_profile(**kwargs):
    for key, value in kwargs.items():  # kwargsは辞書として受け取られる
        print(f"{key}: {value}")

show_profile(name="田中", age=25, hobby="読書")
# → name: 田中
# → age: 25
# → hobby: 読書

関数の応用:よく使うパターンをマスターしよう

関数の中で関数を呼ぶ(関数の組み合わせ)

関数は組み合わせて使うことで、より複雑な処理を整理して書けます。

def square(n):
    return n ** 2

def sum_of_squares(numbers):
    return sum(square(n) for n in numbers)  # square()を内部で呼び出す

print(sum_of_squares([1, 2, 3, 4]))  # → 30(1+4+9+16)

早期return(ガード節)でネストを減らす

条件が満たされない場合に早めに return することで、ネストが深くなるのを防げます。可読性が大きく向上するテクニックです。

# NG例:ネストが深い
def divide_bad(a, b):
    if b != 0:
        result = a / b
        return result
    else:
        return "ゼロ除算エラー"

# OK例:早期returnでスッキリ
def divide(a, b):
    if b == 0:
        return "ゼロ除算エラー"  # 早期return
    return a / b

print(divide(10, 2))  # → 5.0
print(divide(10, 0))  # → ゼロ除算エラー

まとめ:Python関数(def文)の要点整理

この記事で学んだPython関数の要点をまとめます。

概念説明
def関数を定義するキーワード
引数関数への入力データ。複数指定可
キーワード引数引数名を指定して渡す方法
デフォルト値省略可能な引数を作る仕組み
return処理結果を呼び出し元に返す命令
スコープ変数の有効範囲(ローカル/グローバル)
*args任意の数の位置引数をタプルで受け取る
**kwargs任意の数のキーワード引数を辞書で受け取る

関数をうまく使えるようになると、コードの品質が一段階上がります。まずは小さな処理を関数にまとめる練習から始めてみましょう。*args**kwargs の詳細は、それぞれの解説記事で掘り下げて学んでください!

📚 関連商品・おすすめ書籍

スッキリわかるPython入門 第2版 (スッキリわかる入門シリーズ)

もしも

スッキリわかるPython入門 第2版 (スッキリわかる入門シリーズ)

初心者に定番のPython入門書

Amazonで見る
徹底攻略! 電子工作&プログラミング Arduinoで学ぶ電子工作完全ガイド

もしも

徹底攻略! 電子工作&プログラミング Arduinoで学ぶ電子工作完全ガイド

電子工作とプログラミングを同時に学べる

Amazonで見る
Python Web開発実践入門 ―― FastAPIによるWebAPI開発と非同期処理

もしも

Python Web開発実践入門 ―― FastAPIによるWebAPI開発と非同期処理

FastAPIでWebAPI開発を実践的に学ぶ

Amazonで見る

※本記事にはアフィリエイトリンクが含まれます。

ABOUT ME
やまちゃん
これまで学生と社会人を合わせて5000人以上にプログラミング学習を指導。 ゼロからイチをわかりやすく解説する専門家として活動しており、本業ではArduinoを用いたIoT開発とロボットプログラミングが専門。 Pythonを用いたアプリ開発、ウェブアプリケーションの開発で業務の効率化をサポートしています。

COMMENT

メールアドレスが公開されることはありません。 が付いている欄は必須項目です