コース一覧
    Python内包表記・高階関数
    関数はオブジェクト

    Python内包表記・高階関数

    内包表記と高階関数を学び、データ変換を簡潔かつ意図どおりに表現できるようにします。

    1
    内包表記
    01. リスト内包表記と条件15分
    02. if-else付き内包表記15分
    03. 辞書内包表記15分
    04. set内包表記15分
    05. ジェネレータ式15分
    06. つくる 集計のリファクタ20分
    07. 第3章クイズ10分
    2
    高階関数
    01. 関数はオブジェクト15分
    02. map15分
    03. filter15分
    04. sortedとkeyの応用15分
    05. reduce15分
    06. anyとall15分
    07. つくる 抽出・変換パイプライン20分
    08. 第4章クイズ10分

    関数はオブジェクト

    このレッスンでできるようになること。関数そのものを値として変数や辞書に入れ、呼び出す関数を実行時に差し替えられるようになります。

    Python では関数もオブジェクトです。def で作った関数の名前は、その関数オブジェクトを指している変数にすぎません。カッコを付けずに名前だけ書くと、呼び出さずに関数そのものを取り出せます。

    Python

    def plain(expense):
        return f"{expense['name']} {expense['amount']}"
    
    show = plain                                   # 呼び出していない。関数そのものを入れた
    print(show({"name": "牛乳", "amount": 220}))   # 牛乳 220

    カッコを付けた plain(...) は「呼んだ結果」、カッコの無い plain は「関数そのもの」です。この違いが分かると、関数を辞書の値にしたり、別の関数へ引数として渡したりできます。関数を受け取ったり返したりする関数のことを高階関数と呼びます。この章で扱う map と filter と sorted は、どれも関数を引数に取る高階関数です。

    家計簿の表示形式を切り替えたいとき、if 文を長く並べる代わりに辞書を使えます。

    Python

    FORMATTERS = {"plain": plain, "yen": yen}
    formatter = FORMATTERS["yen"]
    print(formatter({"name": "牛乳", "amount": 220}))   # 牛乳 220円

    新しい表示形式が増えても、関数を1つ書いて辞書に1行足すだけで済みます。分岐そのものをデータへ追い出せるのが、関数を値として扱う一番の利点です。逆に FORMATTERS = {"plain": plain()} のようにカッコを付けてしまうと、その場で呼ばれてしまい引数が足りずエラーになります。関数を「渡す」ときはカッコを付けない、と覚えてください。

    要件

    1. 形式名をキー、関数オブジェクトを値にした辞書を作る
    2. 辞書から取り出した関数を支出1件ずつに適用する
    3. 整形済みの文字列を、元の並び順のままリストで返す

    ヒント

    辞書に入れるときは plain のようにカッコを付けません。カッコを付けるとその場で呼ばれてしまいます

    取り出した関数は formatter(expense) のように普通の関数として呼べます

    生田 陸人
    監修生田 陸人
    ゆめさくエンジニア / 現役ソフトウェアエンジニア監修者プロフィールを見る →
    編集 ゆめさく編集部·公開 2026/08/07

    関連レッスン

    • map

      map で全ての支出を税込金額に変換します。

    • filter

      filter で 1000 円以上の支出だけを残します。

    • sortedとkeyの応用

      key にタプルを返して、カテゴリ順かつ金額降順に並べます。

    • reduce

      functools.reduce で畳み込み集計を書き、sum と比べます。

    このレッスンに出てくる用語

    意味があいまいなまま進んだ語は、ここから読み直せます。

    • 関数処理に名前を付けて再利用できる単位
    • 変数データに名前をつけて参照する仕組み
    • オブジェクトキーと値のペアで構造を作るデータ
    • 引数位置引数=順番で渡す。
    • リスト順序付きで複数の値を扱うデータ構造
    main.py
    エディタを読み込んでいます

    メモ

    関数はオブジェクト

    ⌘S で保存