【Python】レッスン3-5:無名関数を理解しよう

ながみえ
【Python学習記事のアイキャッチ画像】Lesson3-5 無名関数を理解しよう

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

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

Lesson1:基礎文法編
Lesson2:制御構造編
Lesson3:関数とスコープ編
・Lesson3-1:関数の基本を理解しよう
・Lesson3-2:関数の戻り値とデフォルト引数を理解しよう
・Lesson3-3:スコープの概念を理解しよう
・Lesson3-4:高階関数を理解しよう
・Lesson3-5:無名関数を理解しよう ◁今回はココ
・練習問題3-1:丁半賭博ゲームを作ろう
・練習問題3-2:石取りゲームを作ろう
Lesson4:データ構造編
Lesson5:オブジェクト指向編
次のステップ:Python基礎習得者にお勧めの道5選(実務or副業)

<<前のページ

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

Pythonの記事一覧

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

次のページ>>

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

無名関数(lambda関数)とは?|関数を短く定義する方法

無名関数(lambda式)は、名前を付けずにその場で関数を一行で定義できる記法です。

def を使った通常の関数より軽量で、短い処理や一時的なコールバックを “その場で” 書きたいときに活躍します。

本文では、基本構文→よくある使い方→使いどころと注意点を短い実例で確認します。

まずは一緒に手を動かして、lambda式の書き方を体得しましょう。

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

無名関数の基本構文|lambdaの“一行定義”と使用例

無名関数(lamda式)とは、名前を付けずに一時的に使う関数であり、基本構文は以下の通りです。

lambda 引数: 式

実際に使用する例を見てみましょう。

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

num = lambda x: x * 2	# 仮引数xを持つ無名関数を定義し、変数fに代入
print(num(5))			# 変数fを実行して出力。結果: 10

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

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

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

def num(x):			# 関数fの定義
    return x * 2	# 関数fの処理内容
print(num(5))		# 関数fを実行して戻り値を出力。結果: 10

関数を変数に代入すること(高階関数)については、↓↓の記事で詳しく解説しています。

あわせて読みたい
【Python】レッスン3-4:高階関数を理解しよう
【Python】レッスン3-4:高階関数を理解しよう

無名関数を使った条件分岐|三項演算子と併用する例

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

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

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】レッスン2-2:if文による分岐処理を理解しよう
【Python】レッスン2-2:if文による分岐処理を理解しよう

まとめ|短い処理をlambdaで表し、使いどころを見極めよう

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

ここまでで、無名関数(lambda式)は「一行で定義できる関数」であり、関数を値として扱える前提のもと、基本構文と代表的な使い方を確認しました。

この学習により、ちょっとした変換・抽出・比較キーの指定をその場で書けるようになり、冗長な一時関数を減らしてコードを整える判断ができます。

反対に処理が長くなる場面では def に戻す、という使いどころの見極めもできるはずです。

まずは身の回りの小さな処理から、一行で書けるものはlambdaで表し、長くなるならdefに切り出す—この切り替えを意識して手を動かしてみてください。

短く整ったコードが積み重なるほど、書くのも読むのもラクになります。

Q
サイト改善アンケート|ご意見をお聞かせください(1分で終わります)

本サイトでは、みなさまの学習をよりサポートできるサービスを目指しております。
そのため、みなさまの「プログラミングを学習する理由」などをアンケート形式でお伺いしています。

1分だけ、ご協力いただけますと幸いです。

【Python】サイト改善アンケート
1.このサイトをどのように活用していますか?また、今後どのように活用したいですか?
5.気になっているサービス・商品があれば教えてください。
(複数選択可)
※ 特定の記事に関する内容の場合は、記事番号(Python Lesson〇-〇)をご記入願います。 また、ご質問はここではなく問い合わせフォームからお願いします。

練習問題:無名関数(lambda関数)を使ってみよう

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

問題|年齢判定プログラムを作ろう

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

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

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

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

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

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

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

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

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

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

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

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

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

age_check = '''(穴埋め)''' age: "大人です" if age >= 18 else "未成年です"  # 条件分岐を使った無名関数

# 年齢を入力し、無名関数を使ってメッセージを表示します
age = 20  # 例として20歳を設定
'''(穴埋め)無名関数 age_check を age に適用し、結果を message に代入する行を書く'''

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

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

解答例|年齢判定メッセージプログラム

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

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

age = 20  # 例として20歳を設定
message = age_check(age)  # 無名関数で年齢を判断

print(f"年齢が{age}歳の場合: {message}")
もっと分かりやすい学習サイトにするために

この記事を読んで「ここが分かりにくかった」「ここが難しかった」等の意見を募集しています。

世界一わかりやすいPython学習サイトにするため、ぜひ 問い合わせフォーム からご意見下さい。

<<前のページ

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

Pythonの記事一覧

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

次のページ>>

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

無名関数の疑問解消|FAQと用語のまとめ

初心者がつまずきやすいポイントをFAQとしてまとめ、またよく使う専門用語をわかりやすく整理しました。

理解を深めたいときや、ふと疑問に感じたときに役立ててください。

FAQ|無名関数に関するよくある質問

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

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

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

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

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

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

Python用語集|無名関数に関する用語一覧

今回の記事で出てきた用語・関数などを一覧で紹介します。

このサイトに出てくる 全てのPython用語をまとめた用語集 も活用してください。

Python用語定義・使い方の概要解説記事へのリンク
無名関数(lambda 関数)lambda キーワードで定義される一時的な関数で、関数名を持たず簡潔に書ける本記事
lambda引数と式のみで関数を表現する構文。高階関数と組み合わせて使われることが多い本記事
三項演算子値1 if 条件 else 値2 の形で、1行で条件分岐の処理を行う構文Lesson2-2
記事URLをコピーしました