Pythonの関数の定義

投稿日: 2024年4月6日

Pythonにおいて関数は、特定のタスクを実行するためのコードのブロックです。関数を使用することで、コードの再利用が可能になり、プログラム全体の構造を整理し、管理しやすくなります。Pythonで関数を定義する基本的な構文は以下の通りです。

関数の定義の構文

def 関数名(パラメータ1, パラメータ2, ..., パラメータn):
    # 関数が呼び出されたときに実行されるコード
    return 戻り値
項目内容
def関数を定義するためのキーワードです。
関数名関数に与える名前です。関数名を通して関数を呼び出します。
パラメータ関数に渡すことができる引数(入力値)です。パラメータはオプションであり、関数によってはパラメータを必要としない場合もあります。
return関数からの戻り値を指定します。return文はオプショナルで、すべての関数が値を返す必要はありません。

パラメータを必要としない関数

パラメータを必要としない関数の例を示します。
このような関数は、固定されたタスクを実行する場合や、外部から入力を必要としない場合に便利です。

例:現在の日時を表示する関数

def show_current_datetime():
    from datetime import datetime
    current_datetime = datetime.now()
    print(f"現在の日時は {current_datetime} です。")

# 関数の呼び出し
show_current_datetime()

この関数show_current_datetimeは、パラメータを取りません。関数が呼び出されると、内部でPythonのdatetimeモジュールを使用して現在の日時を取得し、それを画面に表示します。
この例では、関数内でdatetime.now()を使用して現在の日時を取得しており、その結果はcurrent_datetime変数に格納されます。
最後に、この日時をprint関数を使って出力しています。

パラメータのない関数は、特定の情報を表示したり、繰り返し行われる固定の処理を実行したりする際に有用です。
また、グローバル変数や外部の状態に依存する操作を行う場合にも使用されますが、このような設計は慎重に行う必要があります。
プログラムの状態が予期しない形で変更されることを避けるため、関数が外部状態に強く依存しないようにすることが望ましいです。

パラメータを取る関数の例

パラメータを受け取りながらも、戻り値を持たない関数の例として、受け取った文字列を特定の形式で出力する関数を考えてみましょう。
この種の関数は、処理の結果を直接出力するか、何らかの副作用(例えば、ファイルへの書き込みやグローバル変数の更新)を行うが、呼び出し元に値を返さない場合に使用されます。

例:挨拶メッセージを表示する関数

def greet(name):
    print(f"こんにちは、{name}さん!")

# 関数の呼び出し
greet("山田")

この例では、greet関数は名前を表す文字列nameをパラメータとして受け取ります。
関数の本体では、この名前を使って挨拶メッセージを構成し、print関数を使用してこのメッセージを出力します。
greet関数はreturn文を含まないため、戻り値はありません(厳密に言えば、Pythonの関数はreturn文がない場合、暗黙的にNoneを返しますが、これは関数が意味のある値を返さないことを示しています)。

このような関数は、特定のデータを受け取り、そのデータに基づいたアクションを実行するが、計算結果やデータを呼び出し元に返す必要がない場合に便利です。
例えば、ユーザーインターフェイスの更新、ログの記録、外部システムへの通知など、様々なシナリオで使用されます。

戻り値を持つ関数

パラメータを必要とせず、戻り値を持つ関数の例として、現在の日時を返す関数を考えてみましょう。
この種の関数は、外部からの入力を必要とせず、特定の計算やデータ取得を行い、その結果を呼び出し元に返す場合に使用されます。

例:現在の日時を返す関数

from datetime import datetime

def get_current_datetime():
    return datetime.now()

# 関数の呼び出しと結果の表示
current_datetime = get_current_datetime()
print(f"現在の日時は {current_datetime} です。")

この例では、get_current_datetime関数はパラメータを取りませんが、datetime.now()を呼び出して現在の日時を取得し、それを戻り値として返しています。
この関数を呼び出した後、返された日時が変数current_datetimeに格納され、その内容が表示されます。

パラメータがなくても戻り値がある関数は、システムや環境から特定のデータを取得する場合、または定数値や設定値をプログラム内で提供する場合などに役立ちます。
このような関数を利用することで、プログラムの他の部分が特定の計算結果やデータに依存する場合に、その依存関係を明確にし、再利用しやすくすることができます。

パラメータがあり戻り値がある関数

パラメータを受け取り、計算や処理を行った後に戻り値を返す関数の例として、2つの数の最大公約数(Greatest Common Divisor, GCD)を計算して返す関数を考えてみましむ。
この種の関数は、特定の入力に基づいて計算を行い、その結果を呼び出し元に返す場合に使用されます。

例:2つの数の最大公約数を計算する関数

def gcd(a, b):
    while b != 0:
        a, b = b, a % b
    return a

# 関数の呼び出し例
result = gcd(48, 18)
print(f"48と18の最大公約数は {result} です。")

この例では、gcd関数は2つのパラメータaとbを受け取り、ユークリッドの互除法を使用して最大公約数を計算しています。計算が完了すると、最大公約数を表す値がreturn文によって呼び出し元に返されます。

この関数を呼び出すときには、計算したい2つの数を引数として渡します。この例では、gcd(48, 18)の呼び出しにより、48と18の最大公約数が計算され、その結果6が出力されます。

パラメータを持ち戻り値がある関数は、プログラム内で特定の計算やデータ処理を行いたい場合に特に有用です。関数によっては、複雑なアルゴリズムやデータ変換のロジックをカプセル化し、プログラムの他の部分から簡単に再利用できるようにすることができます。

記事