メインコンテンツにスキップ
モジュール 5 · レッスン 4 / 4コース内の 20/36~10 min
モジュールのレッスン (4/4)

ラムダ関数と高次関数

lambda は匿名関数であり、1 行で定義されます。構文:

Python
lambda parametri: espressione

def と同等ですが、より簡潔で「使い捨て」に適しています。 他の関数に渡す関数。

Python
quadrato = lambda x: x ** 2
quadrato(5)    # 25

# equivalent to:
def quadrato(x):
    return x ** 2

def との違い

側面deflambda
名前必須匿名
ボディ複数のステートメント単一の式
戻る明示的な暗黙的な (式)
ドキュメント文字列はいいいえ

ラムダ内に return はありません。式の値が結果です。

ラムダを使用する場合

ほぼ常に: 並べ替え関数または選択関数の key 引数として。

Python
parole = ["banana", "kiwi", "mela", "fragola"]
sorted(parole, key=len)
# ['kiwi', 'mela', 'banana', 'fragola']

key=len は sorted に「2 つの要素を比較するには、その長さを使用する」と指示します。のために カスタム基準、ラムダを使用します。

Python
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(...)。

Python
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 で定義された関数はエラー トレースバックで実際の名前を保持するため)。

試してみてください

運動#python.m5.l4.e1
試行回数: 0読み込み中…

リスト `words = ['banana', 'kiwi', 'mela', 'fragola']` を指定して、長さの昇順で `by_length` にソートします。 `by_length` を評価します。

エディターを読み込み中…
ヒントを表示

key=len (またはラムダ p: len(p))。

3 回の試行後に解決策が利用可能になります

復習演習

運動#python.m5.l4.e2
試行回数: 0読み込み中…

タプルのリスト `points = [(1, 5), (3, 2), (2, 4)]` を指定して、それらを SECOND 要素で昇順にソートし、`by_y` に代入します。 `by_y`を評価します。

エディターを読み込み中…
ヒントを表示

ラムダ p: p[1]

3 回の試行後に解決策が利用可能になります

追加の課題

運動#python.m5.l4.e3
試行回数: 0読み込み中…

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 回の試行後に解決策が利用可能になります