Pythonの無名関数(lambda)を活用しよう【レッスン3-5】

ながみえ

一つ前のLessonでは関数を使いこなす方法について学習しました。

今回は無名関数について見ていきます。

Lesson1:基礎文法編
Lesson2:制御構造編
Lesson3:関数とスコープ編
・Lesson3-1:関数の基本を理解しよう
・Lesson3-2:関数の戻り値とデフォルト引数を理解しよう
・Lesson3-3:スコープの概念を理解しよう
・Lesson3-4:関数を使いこなそう
・Lesson3-5:無名関数を理解しよう ◁今回はココ
・Lesson3-6:可変長引数を理解しよう
・Lesson3-7:デコレーターを理解しよう
・練習問題3-1:丁半賭博ゲームを作ろう
・練習問題3-2:石取りゲームを作ろう
Lesson4:データ構造編
Lesson5:オブジェクト指向編
次のステップ:Pythonを用いたアプリ開発

<<前のページ

【Python学習記事のアイキャッチ画像】Lesson3-4 関数の受け渡しを理解しよう

Pythonの記事一覧

Python学習カテゴリの親ページ用アイキャッチ画像(テキスト&問題集)、記事一覧へのリンク案内

次のページ>>

【Python学習記事のアイキャッチ画像】Lesson3-☆1 丁半賭博ゲームを作ろう

lambda式とは?短くわかりやすい関数を定義する方法

この章ではPythonにおける「無名関数」の意味や使い方を学習します。必要ない方はここをクリックして練習問題へ飛びましょう。

【Python】勉強猫がノートパソコンを前にして学習を始める様子。記事内の学習スタート用イラスト

Pythonでは関数を簡潔に書く方法として、無名関数(lambda関数)があります。

これは名前を持たない一時的な関数を簡単に作るためのもので、短い処理を記述する際にとても便利です。

通常のdefキーワードを使った関数定義よりもコードをスッキリさせることができ、Pythonの効率的なコーディングに役立ちます。

無名関数の使用例

実際に無名関数を使ってみましょう。

以下のコードではlambdaを使って数値を2倍にする関数を定義しています。

f = lambda x: x * 2
print(f(5))  # 結果: 10

この例では変数fに無名関数が代入されています。この無名関数は引数xを取り、そのxを2倍にして返します。

上記の例ではf(5)を呼び出すと、5が2倍されて10が出力されます。このように、無名関数を使うことで短い処理を簡潔に表現できます。

無名関数を使わずに書くと以下のようになります。

def f(x):
    return x * 2
print(f(5))  # 結果: 10

無名関数を使った条件分岐

無名関数は条件に基づいて異なる処理を行いたいときにも便利です。

次の例では数値が偶数か奇数かを判定し、その結果に応じて文字列を返す無名関数を作成しています。

check_even_odd = lambda x: '偶数' if x % 2 == 0 else '奇数'
print(check_even_odd(10))  # 結果: 偶数
print(check_even_odd(7))   # 結果: 奇数

このコードではxが2で割り切れる場合は「偶数」、そうでない場合は「奇数」という文字列を返す無名関数check_even_oddを定義しています。

lambdaの後に条件式を簡潔に書くことで、数値に応じて出力を変えています。

このように、条件分岐の処理も無名関数で簡単に実装できます。

まとめ

【初心者向け】Pythonの関数の種類と使い方を分かりやすくまとめた概念図と使用例。 特に関数の呼び出しや戻り値、関数を変数に代入する例、引数として渡す例、無名関数、スコープについて視覚的に理解できるようまとめている。

無名関数(lambda関数)はPythonで関数をシンプルかつ素早く定義するための強力なツールです。

通常のdefを使った関数定義よりも短く簡潔に記述できるため、特に一時的な関数や短い処理を表現したい場合に役立ちます。

初心者の方でもシンプルな無名関数の使い方をマスターすることで、より効率的にコードを書くことができるでしょう。

Pythonを使いこなすために、ぜひlambda関数を試してみてください。

練習問題:無名関数(lambda式)を使って年齢を判定しよう

【Python】勉強猫がノートパソコンに向かい、練習問題に挑戦する様子。記事内の休憩用イラスト

無名関数(lambda式)を使って、年齢に応じたメッセージを出力するプログラムを作成しましょう。

18歳以上であれば「大人です」、それ以下であれば「未成年です」と表示します。年齢は変数として与えられ、その値に基づいて判定が行われます。

問題の詳細条件

以下の要件に従ってコードを完成させてください。

  • 無名関数(lambda式)を使って、年齢を判定する関数を定義すること。
  • 入力された年齢が18歳以上の場合は「大人です」、それ以下の場合は「未成年です」と表示すること。
  • 年齢は変数 age に格納すること。
  • 年齢に応じた結果を出力するメッセージを message という変数に格納すること。
  • 結果を「年齢が○○歳の場合: ○○です」の形式で表示すること。

ただし、以下のような実行結果となるコードを書くこと。

年齢が20歳の場合: 大人です。

【ヒント】難しいと感じる人だけ見よう

1からコードを組み立てることが難しい場合は、以下のヒントを開いて参考にしましょう。

Q
ヒント1【コードの構成を見る】

正解のコードは上から順に以下のような構成となっています。
(※下記の□はコード内のインデントを表しています)

1:無名関数lambdaを定義し、年齢を判定する関数age_checkを作成
2:変数ageに数値20を代入
3:無名関数age_checkを呼び出し、変数ageを引数として渡し、結果を変数messageに代入
4:f文字列を使用して「年齢が{age}歳の場合: {message}」の形式で出力

Q
ヒント2【穴埋め問題にする】

以下のコードをコピーし、コメントに従ってコードを完成させて下さい。

# 無名関数を使って年齢を判定する
"""【穴埋め問題1】 ここに無名関数lambdaを使って、年齢を判定する関数age_checkを定義してください。"""

# 年齢を入力し、無名関数を使ってメッセージを表示します
"""【穴埋め問題2】 ここに変数ageに年齢を代入するコードを書いてください。"""

"""【穴埋め問題3】 ここに無名関数age_checkを呼び出して、変数ageを引数にして結果をmessageに格納するコードを書いてください。"""

# 結果を日本語で表示します
"""【穴埋め問題4】 ここにf文字列を使って結果を表示するコードを書いてください。"""

このヒントを見てもまだ回答を導き出すのが難しいと感じる場合は、先に正解のコードと解説を見て内容を理解するようにしましょう。

問題の答え合わせと解説

この問題の一つの正解例とそのコードの解説を以下に示します。

一つの正解例

例えば以下のようなプログラムが考えられます。

Q
正解コード
age_check = lambda age: "大人です" if age >= 18 else "未成年です"  # 条件分岐を使った無名関数

# 年齢を入力し、無名関数を使ってメッセージを表示します
age = 20  # 例として20歳を設定
message = age_check(age)  # 無名関数で年齢を判断

# 結果を日本語で表示します
print(f"年齢が{age}歳の場合: {message}")  # 出力: 年齢が20歳の場合: 大人です。

正解例の詳細解説

このコードは無名関数(lambda式)を使って年齢を判定し、結果を出力するシンプルなプログラムです。

以下に、コードの各部分を詳しく解説します。

Q
詳細解説

無名関数の定義

age_check = lambda age: "大人です" if age >= 18 else "未成年です"

ここでは無名関数(lambda式)を使ってage_checkという関数を定義しています。

ageという引数を受け取り、ageが18歳以上の場合は「大人です」を返し、それ以外の場合は「未成年です」を返します。

年齢の入力(代入)

age = 20

ここでは変数ageに20を代入しています。

この値を使って無名関数age_checkで年齢の判定を行います。実際には、ユーザーから入力を受け取る方法もありますが、今回は固定の数値を設定しています。

無名関数の呼び出し

message = age_check(age)

この行では先ほど定義した無名関数age_checkを呼び出し、引数としてageを渡しています。

関数の戻り値は「大人です」または「未成年です」という文字列で、その結果をmessageという変数に格納しています。

結果の表示

print(f"年齢が{age}歳の場合: {message}")

この行ではprint関数を使ってf文字列で結果を表示します。

f文字列は変数を埋め込む際に便利な形式で、この場合はagemessageの値がそれぞれ埋め込まれ、「年齢が20歳の場合: 大人です」といった形式で出力されます。

まとめ

このプログラムでは無名関数(lambda式)を使ってシンプルな年齢判定を行っています。

無名関数は特定の処理を一時的に定義する場合に便利です。特に条件分岐と組み合わせることで、短いコードで効率的に処理を行える点が特徴です。

<<前のページ

【Python学習記事のアイキャッチ画像】Lesson3-4 関数の受け渡しを理解しよう

Pythonの記事一覧

Python学習カテゴリの親ページ用アイキャッチ画像(テキスト&問題集)、記事一覧へのリンク案内

次のページ>>

【Python学習記事のアイキャッチ画像】Lesson3-☆1 丁半賭博ゲームを作ろう

FAQ|Pythonの無名関数(lambda式)の使い方

Q
Q1. lambda式はどんな場面で使うのが適切ですか?

lambda式は、一時的な関数を簡潔に定義したい場合や、map()filter()sorted()などの関数に渡す関数としてよく使われます。

Q
Q2. lambda式と通常の関数の違いは何ですか?

lambda式は1行で簡潔に書ける無名関数ですが、複数行の処理や複雑な処理には適していません。シンプルな処理に限定して使用するのが適切です。

Q
Q3. lambda式に条件分岐を入れることはできますか?

条件式(3項演算子)を使えば、lambda式の中にif-elseを記述することは可能です。ただし、処理が複雑になる場合は通常の関数を使う方が可読性が高くなります。

質問用コンタクトフォーム

この記事はAIを用いて書いた記事です。

人間の目による確認も行っていますが、もし間違い等ありましたらご指摘頂けると大変助かります。

Python記事一覧へ戻る
トップページへ戻る

記事URLをコピーしました