やっほー!国内のAI狂いだよ!✨
第11回へようこそ!前回は関数の「地雷(デフォルト引数)」を回避する方法を学んだね。
今回は逆に、関数を最強に柔軟にする「魔法の引数」と、名前すら持たない「使い捨て関数(ラムダ)」を紹介するよ。
「引数が何個来るかわからない!」なんて時も、Pythonなら*ひとつで解決できちゃうんだ。これを知ってると一気に上級者っぽく見えるから頑張ろう!😎✨
公式の「ここがわかりにくい」:ラムダって何語?
公式ドキュメントには、こんな呪文のような言葉が書かれているよ。
lambda キーワードを使うと、小さくて無名 (anonymous) の関数を作成できます。
「ラムダ(Lambda)」はギリシャ文字の $\lambda$ から来ていて、計算機科学の世界では「関数」を表す記号として有名なんだ。
Pythonでは「わざわざ名前をつけて def するほどでもない、1行で終わる使い捨ての処理」のことを指すよ。
「名もなき家事」ならぬ「名もなき関数」だね!🧹
1. *args(パック):何個でも受け止める魔法のポケット
関数の引数に *(アスタリスク1個)をつけると、そこには「個数が決まっていない引数」を何個でも放り込めるようになるんだ。
これをパック(Packing)と呼ぶよ。
🐍 サンプルコードを見る(クリックで開閉)
# *args で引数をまとめて受け取る
def show_pack(*args):
print(f"中身: {args}")
print(f"型: {type(args)}")
# 3個渡すと...
show_pack(1, 2, 3)
# -> 中身: (1, 2, 3)
# -> 型:
# 1個も渡さなくてもエラーにならない!
show_pack()
# -> 中身: ()
# -> 型:
中身: (1, 2, 3)
型: <class ‘tuple’>
中身: ()
型: <class ‘tuple’>
受け取った args は関数の中では「タプル」として扱われるのがポイント!
だから for 文で回したり、インデックスでアクセスしたりできるよ。
2. **kwargs:名前付きの余り物は辞書へ!
今度は **(アスタリスク2個)。
これをつけると、キー=値 の形で渡された引数を「辞書(dict)」として受け取れるんだ。
🐍 サンプルコードを見る(クリックで開閉)
def show_profile(**kwargs):
print(f"受け取った辞書: {kwargs}")
# 辞書だから .get() とか使える!
if 'name' in kwargs:
print(f"名前は {kwargs['name']} ですね!")
# 好きな名前で引数を渡せる!
show_profile(name="AI狂い", age=500, job="ブロガー")
受け取った辞書: {‘name’: ‘AI狂い’, ‘age’: 500, ‘job’: ‘ブロガー’}
名前は AI狂い ですね!
3. 【超重要】アンパック:箱から出して渡す!
さっきの「パック」の逆!
手元にあるリストやタプルを、関数の引数として「バラして」渡したい時も * を使うよ。
これをアンパック(Unpacking)と呼ぶんだ。
パックとアンパックの違い(試験に出る!)
- 関数を作る時(defの行):
*argsは「まとめる(パック)」 - 関数を使う時(呼ぶ行):
*listは「バラす(アンパック)」
🐍 サンプルコードを見る(クリックで開閉)
# 普通の3つの引数を取る関数
def add_three(a, b, c):
return a + b + c
# リストにデータが入っている
nums = [10, 20, 30]
# そのままだとエラー! a にリストが渡されて、bとcが足りない
# add_three(nums) -> TypeError
# * をつけて「アンパック」して渡す!
# add_three(10, 20, 30) と同じ意味になる
print(add_three(*nums))
# range関数でもよく使うテクニック
r_args = [0, 10, 2] # 開始, 終了, ステップ
print(list(range(*r_args)))
60
[0, 2, 4, 6, 8]
4. ラムダ式:名もなき使い捨て関数
例えば「足し算するだけの関数」をわざわざ def add(a, b): ... って書くの、ちょっと大げさだよね。
そんな時に lambda を使うと、1行でスッキリ書けるんだ。
lambda 引数: 処理(戻り値)
🐍 サンプルコードを見る(クリックで開閉)
# 普通の関数定義
def add_def(x, y):
return x + y
# ラムダ式(やってることは同じ!)
# return は書かなくても、計算結果が勝手に返されるよ
add_lambda = lambda x, y: x + y
print(add_def(10, 5))
print(add_lambda(10, 5))
15
15
5. 【セットで覚えよう】三項演算子(条件式)
ラムダ式には「式」しか書けないから、普通の if 文(文)は使えないの。
でも、「三項演算子(条件式)」なら使えるんだ!
(Trueの値) if (条件) else (Falseの値)
🐍 サンプルコードを見る(クリックで開閉)
score = 80
# 普通のif文
if score >= 60:
result = "合格"
else:
result = "不合格"
# 三項演算子(1行でスッキリ!)
result_short = "合格" if score >= 60 else "不合格"
print(result_short)
# ラムダ式の中で使うと最強!
# 偶数なら"Even"、奇数なら"Odd"を返すラムダ
check = lambda x: "Even" if x % 2 == 0 else "Odd"
print(check(10))
print(check(7))
合格
Even
Odd
英語として読むと「”合格” if score >= 60 else “不合格”」=「合格だよ、もし60点以上ならね。それ以外は不合格」って読めるから、慣れると直感的だよ!
試験に出る!要注意ポイント
今回の範囲で、Python 3 エンジニア認定基礎試験によく出るポイントをまとめたよ!📝
① *args と **kwargs の同居
一つの関数で両方使うこともできるけど、順番が決まっているよ。
普通の引数 → *args → **kwargs の順じゃないとダメ!
def func(a, *args, **kwargs): # OK
pass
② ラムダ式の制限
ラムダ式には「式」しか書けない。
つまり、print() みたいな式はOKだけど、a = 10 みたいな代入文や、通常の if 文は書けないんだ。
だからこそ、三項演算子とのコンボが重要になるんだね!
理解度チェック!ミニクイズ
特殊な引数とラムダ式、バッチリ理解できたかな?
試験レベルの問題でチェックしてみよう!🔍
次の関数定義で、引数 args の型は何になる?
def func(*args):
print(type(args))
func(1, 2, 3)
▼ クリックで正解を表示
args の型は何になる?解説:
*args(パック)で受け取った可変長引数は、変更不可な「タプル」としてまとめられるよ。
三項演算子を使った正しい記述は?
▼ クリックで正解を表示
x = 10 if True else 20
解説:
値1 if 条件 else 値2 の順序だよ。
「値1だよ(もし条件がTrueなら)、それ以外は値2だよ」って読み下そう!
リスト a = [1, 2] を関数 f(x, y) に渡す正しい方法は?
▼ クリックで正解を表示
a = [1, 2] を関数 f(x, y) に渡す正しい方法は?f(*a)
解説:
リストの中身をバラして引数として渡す(アンパックする)には、* をつける必要があるよ。
f(a) だと、x にリスト丸ごとが渡されて、y が足りないエラーになっちゃうよ。
まとめ:次回への引き
今回は「可変長引数とラムダ式」について解説したよ!
パックとアンパック、そして三項演算子を使いこなせれば、君のコードは一気にスタイリッシュになるはず✨
次回は、Pythonのデータ構造を極める回!
テーマは「リストの最強メソッド:append, extend, sortなど」だよ。
リストをスタック(積み上げ)やキュー(待ち行列)として使う方法や、リスト内包表記への布石となる重要メソッドたちを一気に紹介するからお楽しみに!👋✨
出典: Python公式チュートリアル
Copyright © 2001-2026 Python Software Foundation. Licensed under the PSF License.






