プログラミング

Step 15: 処理をまとめる「関数」の作り方と使い方

Step 15: 処理をまとめる「関数」の作り方と使い方

概要

フリーランスエンジニア スリーネクスト

Pythonプログラミングの基本要素である「関数」を徹底解説します。defキーワードを使った関数の定義方法、引数(ひきすう)を用いたデータの受け渡し、return文による処理結果の返し方という基本をステップバイステップで学びます。

また、変数が有効な範囲を示す「スコープ」の概念にも触れます。同じ処理を何度も書く手間を省き、コードを部品化することで、プログラム全体の可読性と保守性を飛躍的に向上させるための必須スキルを図解と共に習得します。

目次
「ゼロから始めるPython学習」各ステップのタイトル案
ゼロから始めるPython学習 STEP20目次

プログラミング未経験者向けPython入門講座。環境構築から変数、if文、for文、関数といった基本までを20のステップでわかりやすく解説します。自分のペースで一歩ずつ着実に学び、プログラミングの第一歩を踏み出しましょう!

続きを見る

はじめに

これまでのステップで、Pythonの基本的な文法やデータ型を学んできました。プログラムを書いていると、何度も同じような処理を繰り返したり、少し複雑な処理をいくつかのステップに分けたりしたくなることがあります。そんな時に非常に役立つのが関数 (function) です。

関数を使うことで、一連の処理に名前を付けてまとめておき、必要なときにその名前を呼び出すだけで、何度でも同じ処理を実行することができます。これは、コードの再利用性を高め、プログラムをより整理しやすく、理解しやすくするための重要な概念です。

関数の基本的な作り方(定義)

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

def 関数名(引数1, 引数2, ...):
    # 関数の処理 (インデントされたブロック)
    # 必要に応じて return 文で結果を返す
  • def: 「これから関数を定義します」という合図です。
  • 関数名: 関数に付ける名前です。変数名と同じように、分かりやすい名前を付けましょう(例: greet, calculate_sum, is_even)。
  • (引数1, 引数2, ...): 関数に渡すことができる値(入力)です。引数はなくても構いません。複数の引数がある場合は、カンマ , で区切ります。
  • : (コロン): 関数名の後のコロンは、「ここからが関数の処理ブロックです」という合図です。
  • インデントされたブロック: 関数が実行されたときに実際に行われる処理を書きます。
  • return 値 (省略可能): 関数が処理の結果として値を返す場合に書きます。return 文がない関数は、処理が終わると自動的に呼び出し元に戻ります。値を返さない関数は、手続き (procedure) と呼ばれることもあります。

この関数の定義を図で表すと以下のようになります。

graph TD
    A(def 関数名(引数));
    B{関数の処理ブロック};
    C(return 値);
    A --> B;
    B --> C;
    B --> D(処理終了);
    A --> D;

関数の使い方(呼び出し)

定義した関数を使う(実行する)ことを関数の呼び出し (call) と言います。関数を呼び出すには、その名前の後ろに丸括弧 () を付けます。関数が引数を取る場合は、丸括弧の中に実引数 (argument) と呼ばれる具体的な値を渡します。

Python

# 関数の定義 (例)
def greet(name):
    print(f"こんにちは、{name}さん!")

# 関数の呼び出し
greet("太郎")
greet("花子")

# 実行結果
# こんにちは、太郎さん!
# こんにちは、花子さん!

この例では、greet という名前の関数を定義しました。この関数は name という引数を一つ取り、渡された名前に挨拶をする処理を行います。その後、greet("太郎")greet("花子") という形で関数を呼び出し、それぞれ異なる名前で挨拶が出力されます。

引数(parameter / argument)

関数に渡す値のことを引数 (ひきすう) と言います。関数の定義で指定する変数を仮引数 (parameter)、関数を呼び出す際に実際に渡す値を実引数 (argument) と呼びます。

引数なしの関数

引数を必要としない関数を定義することもできます。

def say_hello():
    print("Hello!")

say_hello()  # 呼び出し
# 実行結果: Hello!

複数の引数を持つ関数

関数は複数の引数を受け取ることができます。

def add(num1, num2):
    sum_result = num1 + num2
    print(f"{num1} + {num2} = {sum_result}")

add(5, 3)      # 実引数として 5 と 3 を渡す
add(10, -2)    # 実引数は変数でもOK
x = 7
y = 4
add(x, y)

# 実行結果
# 5 + 3 = 8
# 10 + -2 = 8
# 7 + 4 = 11

引数の順序

関数を呼び出す際、実引数は原則として仮引数で定義された順序と同じ順序で渡す必要があります。

戻り値(return value)

関数が処理を行った結果として、呼び出し元に値を返すことができます。これには return 文を使います。

def multiply(a, b):
    result = a * b
    return result  # 結果を返す

product = multiply(4, 6)
print(f"4 × 6 = {product}")

# 実行結果: 4 × 6 = 24

return 文が実行されると、関数の処理はそこで終了し、指定された値が呼び出し元に返されます。戻り値を受け取った側は、その値を変数に代入したり、他の処理に使ったりすることができます。

関数が return 文を含まない場合、または return の後に値が指定されていない場合は、暗黙的に None という特別な値が返されます。

関数のスコープ(scope)

関数の中で定義された変数(ローカル変数) は、その関数の中でのみ有効です。関数の外からローカル変数にアクセスすることはできません。一方、関数の外で定義された変数(グローバル変数) は、特別な宣言なしに関数の中で参照できますが、原則として関数の中で値を直接変更するべきではありません(意図しない副作用を引き起こす可能性があるため)。

global_var = 10

def my_function():
    local_var = 5
    print(f"関数内のローカル変数: {local_var}")
    print(f"関数内のグローバル変数: {global_var}")

my_function()
# print(local_var)  # -> NameError: name 'local_var' is not defined
print(f"関数外のグローバル変数: {global_var}")

# 実行結果
# 関数内のローカル変数: 5
# 関数内のグローバル変数: 10
# 関数外のグローバル変数: 10

関数のメリットと活用例

関数を使うことには多くのメリットがあります。

  1. コードの再利用性: 同じ処理を何度も書く必要がなくなり、コード量を減らせます。
  2. 可読性の向上: 処理が意味のある単位に分割されるため、プログラム全体の構造が理解しやすくなります。
  3. 保守性の向上: 処理の内容を変更する場合、該当の関数だけを修正すれば済みます。

活用例

  • 数値計算: 足し算、引き算、掛け算などの基本的な計算を関数にする。
  • 文字列操作: 文字列の結合、分割、置換などの処理を関数にする。
  • データ処理: リストや辞書の要素に対する特定の操作を関数にする。
  • 入出力: ユーザーからの入力処理や、結果の表示処理を関数にする。

例えば、与えられたリストの平均値を計算する関数は以下のようになります。

def calculate_average(numbers):
    if not numbers:  # 空のリストの場合の処理
        return 0
    total = sum(numbers)
    average = total / len(numbers)
    return average

data = [10, 20, 30, 40, 50]
avg = calculate_average(data)
print(f"リスト {data} の平均値は {avg} です。")

empty_list = []
avg_empty = calculate_average(empty_list)
print(f"空のリストの平均値は {avg_empty} です。")

# 実行結果
# リスト [10, 20, 30, 40, 50] の平均値は 30.0 です。
# 空のリストの平均値は 0 です。

まとめ

今回は、処理をまとめて再利用可能にするための「関数」の作り方と使い方を学びました。

  • 関数の定義 (def): 処理に名前を付け、引数や処理内容を定義する。
  • 関数の呼び出し: 定義した関数名に () を付けて実行する。引数が必要な場合は実引数を渡す。
  • 戻り値 (return): 関数が処理結果を呼び出し元に返す。
  • スコープ: 変数の有効範囲(ローカル変数とグローバル変数)。

関数は、より複雑なプログラムを作成するための基礎となる非常に重要な概念です。積極的に関数を活用して、効率的で読みやすいコードを書けるように練習しましょう。

目次
「ゼロから始めるPython学習」各ステップのタイトル案
ゼロから始めるPython学習 STEP20目次

プログラミング未経験者向けPython入門講座。環境構築から変数、if文、for文、関数といった基本までを20のステップでわかりやすく解説します。自分のペースで一歩ずつ着実に学び、プログラミングの第一歩を踏み出しましょう!

続きを見る

-プログラミング