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

記事内に商品プロモーションを含む場合があります

この記事で学べる知識:無名関数

この記事の練習問題で使用する知識:
レッスン1の知識比較演算子と論理演算子条件分岐(if-else文)条件分岐(elif文)条件分岐(match文)繰り返し処理(for文)繰り返し処理(while文)繰り返しの制御、エラーメッセージ例外処理の基礎関数の定義と使用戻り値とデフォルト引数スコープの概念関数の受け渡し無名関数

<<前の問題 問題集Top 次の問題>>

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の後に条件式を簡潔に書くことで、数値に応じて出力を変えています。

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

まとめ

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

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

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

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




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

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

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

この問題の要件

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

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

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

*****↓↓正解コードの実行結果の例↓↓*****

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

この問題を解くヒント

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

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

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

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

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

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

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

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

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

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

 

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



解答例と解説

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

正解コードの例

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

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

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

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

正解コードの解説

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

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

無名関数の定義

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歳の場合: 大人です」といった形式で出力されます。

【Python】レッスン1-05:フォーマット文字列を使いこなそう【Python】フォーマット文字列をマスターするためのオンライン教材&練習問題。フォーマット文字列という言葉の意味やコードの中での役割を、プログラミング初心者に向けて分かりやすく解説します。シンプルな練習問題を使ってPythonの知識を深めることができますので、今すぐ学習をスタートしましょう。...

まとめ

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

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

<<前の問題 問題集Top 次の問題>>

この記事への質問・コメント

この記事を作成するにあたりAIを活用しています。

問題ないことは確認していますが、もし間違いや表現の違和感などありましたら、ご指摘頂けると大変助かります。






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