Pythonのdefで関数を定義しよう|基本から実例まで詳しく解説

※本サイトにはプロモーション・広告が含まれています。

(最終更新日:2023年8月)

✔当記事はこんな方へ向けて書かれています

「Pythonのdefとはどういうことなのだろう」
「Pythonでdefの定義方法を理解したい」
「defの使用例を詳しく知りたい」

✔当記事を読むことで、以下のことを学べます

  • python defの基本概念
  • python defの具体的な定義方法やその応用例
  • python defの活用事例

当記事では、python defの基本概念からさらに深い使い方まで、具体的なサンプルとともに詳細に説明しています。

記事の最後まで、ぜひお付き合いください。

筆者プロフィール

筆者プロフィールアイコン

【現職】プロダクトマネージャー

【副業】ブログ(月間17万PV)/YouTube/Web・アプリ制作

「プログラミング × ライティング × 営業」の経験を活かし、30後半からのIT系職へシフト。当サイトでは、実際に手を動かせるWebアプリの開発を通じて、プログラミングはもちろん、IT職に必要な情報を提供していきます。

【当ブログで紹介しているサイト】

当サイトチュートリアルで作成したデモ版日報アプリ

Django × Reactで開発したツール系Webアプリ

✔人に見せても恥ずかしくないコードを書こう

「リーダブルコード」は、わかりやすく良いコードの定義を教えてくれる本です。

  • 見るからにきれいなコードの書き方
  • コードの分割方法
  • 変数や関数の命名規則

エンジニアのスタンダートとすべき基準を一から解説しています。

何回も読むのに値する本なので、ぜひ手にとって読んでみてください。

Pythonと関数について

こちらでは、Pythonと関数についてお伝えしていきます。

defは関数を定義するために使われる句だからです。

  • Pythonの特性
  • 関数の役割と重要性

Pythonの特性

Pythonは、読みやすさと使いやすさを重視した汎用の高水準言語。

コードは可能な限りシンプルで理解しやすくなければならないという思想が、Pythonの基本を形成しています。

Pythonは、短くて読みやすいコードで複雑なアイデアを表現できるという特性があり、これがPythonが初心者にとって親しみやすい言語である理由のひとつです。

関数の役割と重要性

関数は、特定のタスクを実行するためのコードブロックです。

関数を使用する主な理由は、コードの重複を避けるためと、コードの構造を整理・最適化するためです。

関数はコードの再利用性を高め、読みやすさと保守性を向上させます。

関数はモジュール化されたコードブロックであるため、テストとデバッグが容易になります。

Pythonの「def」の基本

こちらでは、Pythonにおける関数の定義・呼び出しについてお伝えしていきます。

「def」の基本を理解することで、Pythonコードの書き方がより分かりやすくなるでしょう。

  • 関数の定義と呼び出しの流れ
  • インデントの重要性
  • インデントで気を付けるべきこと

関数の定義と呼び出しの流れ

Pythonでは、関数は「def」キーワードを用いて定義されます。

関数の定義は以下のような形式です。

def function_name(parameters):
    # function body
    return result
  • “function_name”:関数の名前
  • “parameters”:関数が受け取る引数
  • “function body”:関数が実行する具体的なコード
  • “result”:関数が結果を返す場合に用いる

関数を呼び出すには、定義した関数名と一緒に必要な引数を括弧内に記述します。

output = function_name(input)

インデントの重要性

Pythonでは、インデント(通常は空白4つまたはタブ1つ)はコードブロックの開始と終了を表します。

特に関数定義の際には、関数の本体部分を示すためにインデントが必須です。

以下の例では、”print”ステートメントは関数の本体なので、インデントが適用されています。

def greet():
    print("Hello, world!")

インデントで気を付けるべきこと

関数を定義する際に、インデントでは以下のことに気をつけましょう。

  • 必ず関数の処理コードにはインデントを使う
  • 同じ関数内ではインデントを一貫させる(空白4つと2つで混在させない)

インデントはPythonにおける構文の一部です。

関数を定義する際にはインデントに注意を払い、コードブロックが適切に構成されていることを確認しましょう。

関数の引数について

こちらでは、引数の基本的な使い方やその指定方法について詳しく説明します。

関数の引数を正しく理解・使用することで、コードの柔軟性と再利用性が向上するでしょう。

  • 位置専用引数とキーワード専用引数
  • デフォルト引数の活用
  • 可変長引数の理解

位置専用引数とキーワード専用引数

Pythonの関数では、引数の指定方法として、「位置引数」や「キーワード引数」があります。

  • 位置引数:関数呼び出し時に引数を指定する際の順序に従う
  • キーワード引数は引数名と値のペアを指定する

以下は、namemsgは位置引数の例です。

def greet(name, msg):
    print(f"Hello {name}, {msg}")

greet("Alice", "Good morning!")  # Positional arguments

greet(“Alice”, “Good morning!”)と呼び出すことで、”Alice”がnameに、”Good morning!”がmsgにそれぞれバインドされます。

引数名を指定することで、引数の順序を無視したキーワード引数としても呼び出し可能です。

greet(msg="Good morning!", name="Alice")

デフォルト引数の活用

デフォルト引数は、関数呼び出し時に引数が指定されなかった場合に使用されるデフォルト値を設定するもの。

一部の引数をオプションとして、省略できるようになるのです。

以下の例では、msg引数にデフォルト値”Good day!”が設定されています。

def greet(name, msg="Good day!"):
    print(f"Hello {name}, {msg}")

greet("Alice")  # Prints: Hello Alice, Good day!

この関数では、msg引数を省略してもエラーにならず、デフォルト値が使用されます。

可変長引数の理解

Pythonでは、*args**kwargsという特殊な構文を提供しています。

なぜなら関数で、可変数の引数を受け取れるようにするためです。

  • *args:任意の数の位置引数をタプルとして受け取る
  • **kwargs:任意の数のキーワード引数を辞書として受け取る

*args**kwargsを使用して、任意の数の引数を受け取るexample_functionを定義してみましょう。

def example_function(*args, **kwargs):
    for arg in args:
        print(f"arg: {arg}")
    for key, value in kwargs.items():
        print(f"{key}: {value}")

example_function(1, 2, 3, a="hello", b="world")

*argsにより数値の1、2、3がタプルとして、**kwargsによりキーと値のペア(a: "hello"b: "world")が辞書として受け取られます。

引数の高度な活用方法:引数のアンパック

ここでは、リストや辞書を展開して引数として指定する方法について詳しく説明します。

このような高度な引数の活用は、Pythonコードを簡潔にするのに役立ちます。

  • リストやタプルを展開して指定
  • 辞書を展開して指定

リストやタプルを展開して指定

関数を呼び出す際に、既存のリストやタプルを引数として渡したい場合があります。

Pythonの*演算子を使いましょう。

リストやタプルの要素を「アンパック」し、個々の引数として関数に渡せるのです。

例をご覧ください。

def print_numbers(a, b, c):
    print(a, b, c)

args = [1, 2, 3]
print_numbers(*args)  # Prints: 1 2 3

リストargsの要素がprint_numbers関数の引数としてアンパックされています。

辞書を展開して指定

**演算子を使って、辞書のアンパックも可能。

キーと値を、キーワード引数として関数に渡せます。

以下をご覧ください。

def print_values(a, b, c):
    print(a, b, c)

kwargs = {'a': 1, 'b': 2, 'c': 3}
print_values(**kwargs)  # Prints: 1 2 3

辞書kwargsの各要素(キーと値のペア)が、個々のキーワード引数として関数に渡されます。

結果として関数は、a=1, b=2, c=3という引数で呼び出されます。

戻り値について:returnの使い方

こちらでは、「戻り値」について詳しく説明します。

戻り値は関数が処理結果を呼び出し元に返す一般的な手段のこと。

ひとつずつ見ていきましょう。

  • returnの基本
  • Noneを返す関数
  • 多値を返す方法

returnの基本

関数内部でreturn文を使用すると、その時点で関数の実行が終了します。

指定した値が呼び出し元に返されるからです。

以下の例では、関数addが二つの数値の和を返します。

def add(a, b):
    return a + b

result = add(1, 2)
print(result)  # Prints: 3

add(1, 2)の呼び出し結果が変数resultに代入されています。

Noneを返す関数

Pythonでは、関数が明示的に値を返さない場合、その戻り値はNoneです。

そのケースは以下になります。

  • 関数でreturn文が使われていない
  • return文の後に値が指定されていない

以下に例を示します。

def no_return_value():
    print("This function does not return a value.")

result = no_return_value()
print(result)  # Prints: None

no_return_value関数は値を返さないため、その戻り値はNoneとなります。

多値を返す方法

Pythonの関数は、一度に複数の値を返すことも可能です。

返す値をカンマで区切り、それらをタプルとして返します。

呼び出し元では、そのタプルをアンパックして複数の変数に代入することが一般的です。

以下に例を示します。

def return_multiple_values():
    return 1, 2, 3

a, b, c = return_multiple_values()
print(a, b, c)  # Prints: 1 2 3

上記のreturn_multiple_values関数は、3つの値をタプルとして返しています。

関数を更に理解する

こちらでは、Python関数のより高度な概念について説明します。

引数とキーワード引数の混合利用と、関数と引数のベストプラクティスを見ていきましょう。

  • 引数とキーワード引数の混合利用
  • 関数と引数のベストプラクティス

引数とキーワード引数の混合利用

Pythonでは、位置引数とキーワード引数を一緒に使えます。

関数の可読性と柔軟性が向上するからです。

呼び出し時には位置引数を先に指定し、その後にキーワード引数を指定する必要があります。

以下がその例です。

def mixed_arguments(a, b, c='DEFAULT', d='DEFAULT'):
    print(a, b, c, d)

mixed_arguments(1, 2, c='hello', d='world')

この例では、関数mixed_argumentsは位置引数abと、キーワード引数cとdを受け取ります。

関数と引数のベストプラクティス

Pythonで関数を効果的に使用するためには、いくつかのベストプラクティスに従うことが推奨されます。

以下に、その主なものをいくつか紹介します。

  1. 引数の数を最小限に抑える
    関数が受け取る引数の数は、その関数の複雑さを反映する。可能な限り引数の数は最小限に抑えることがおすすめです。
  2. 関数は単一の任務を実行する
    関数は単一の任務または機能を持つべき。関数は再利用可能でテストしやすく、理解しやすくなります。
  3. キーワード引数を活用する
    キーワード引数は、関数の呼び出し方が明確で理解しやすいものにすべき。デフォルト値を設定することにより、関数の柔軟性を向上させられます。

まとめ

当記事では以下のことをお伝えしてきました。

  • 関数の定義方法
  • 引数の使い方
  • 戻り値の理解
  • 関数のベストプラクティス

Pythonの関数をより理解し、効果的に使うための知識を深めることができたことでしょう。

関数はプログラミングにおける中心的な概念であり、効率的で再利用可能なコードを書くためには欠かせないもの。

より熟練したプログラマーになるためには、引き続き関数の理解を深め、そのさまざまな使い方を習得していくことをおすすめします。

タイトルとURLをコピーしました