モジュールのレッスン (4/4)
ラムダ関数と高次関数
lambda は匿名関数であり、1 行で定義されます。構文:
lambda parametri: espressionedef と同等ですが、より簡潔で「使い捨て」に適しています。
他の関数に渡す関数。
quadrato = lambda x: x ** 2
quadrato(5) # 25
# equivalent to:
def quadrato(x):
return x ** 2def との違い
| 側面 | def | lambda |
|---|---|---|
| 名前 | 必須 | 匿名 |
| ボディ | 複数のステートメント | 単一の式 |
| 戻る | 明示的な | 暗黙的な (式) |
| ドキュメント文字列 | はい | いいえ |
ラムダ内に return はありません。式の値が結果です。
ラムダを使用する場合
ほぼ常に: 並べ替え関数または選択関数の key 引数として。
parole = ["banana", "kiwi", "mela", "fragola"]
sorted(parole, key=len)
# ['kiwi', 'mela', 'banana', 'fragola']key=len は sorted に「2 つの要素を比較するには、その長さを使用する」と指示します。のために
カスタム基準、ラムダを使用します。
utenti = [
{"nome": "Ada", "eta": 36},
{"nome": "Linus", "eta": 54},
{"nome": "Grace", "eta": 85},
]
per_eta = sorted(utenti, key=lambda u: u["eta"])
# sorted by ascending ageその他の一般的な用途: min(...)、max(...)、filter(...)、map(...)。
nums = [-3, 1, -4, 1, -5, 9]
max(nums, key=lambda n: abs(n)) # -5 (maximum by absolute value)高次関数
関数を引数として受け入れる場合、関数は高階になります。
1つを返します。 sorted、max、filter、map は上位です。ラムダ
はまさに高次の呼び出しを容易にするために存在します。
ラムダ関数を避けるべき場合
Lambda 関数は、短くて使い捨ての操作 (クイックソートなど) に役立ちます。ただし、変数 (double = lambda x: x * 2 など) にラムダを割り当てる場合は、読みやすさとデバッグの目的で標準の def ブロックを使用することが一般的に推奨されます (def で定義された関数はエラー トレースバックで実際の名前を保持するため)。
試してみてください
リスト `words = ['banana', 'kiwi', 'mela', 'fragola']` を指定して、長さの昇順で `by_length` にソートします。 `by_length` を評価します。
ヒントを表示
key=len (またはラムダ p: len(p))。
3 回の試行後に解決策が利用可能になります
復習演習
タプルのリスト `points = [(1, 5), (3, 2), (2, 4)]` を指定して、それらを SECOND 要素で昇順にソートし、`by_y` に代入します。 `by_y`を評価します。
ヒントを表示
ラムダ p: p[1]
3 回の試行後に解決策が利用可能になります
追加の課題
Define an anonymous `lambda` function that takes a number `x` and returns `True` if the number is even, and `False` otherwise. Assign the lambda to the variable `is_even` and test it with `is_even(8)` as the last line.
ヒントを表示
is_even = lambda x: x % 2 == 0 と書き込み、is_even(8) を呼び出します。
3 回の試行後に解決策が利用可能になります