Python の Lambda 関数で複数の引数を渡す
ラムダ形式またはラムダ式は、Python の無名関数です。これらは、Python で予約済みの lambda
キーワードを使用して作成できるインライン関数です。
この記事では、Python のラムダ関数について説明し、それらの中で複数の引数を処理する方法を学習します。
Python の Lambda 関数
ラムダ関数は、lambda
キーワード、パラメーターまたはバインドされた変数、および関数本体の 3つの部分で構成されます。これらの関数はインラインであるため、関数本体は単一の Python 式のみを持つことができます。
これらの関数はすぐに呼び出すことができるだけでなく、他の通常の Python 関数と同じように使用することもできます。
Lambda 関数の構文は次のとおりです。
lambda < parameters comma seperated >: expression
関数本体の式は何らかの値を返す必要があることに注意してください。式が値を返さない場合、ラムダ関数の結果は None
値になります。
インライン呼び出しの場合、ラムダ関数を括弧で囲み、その隣の引数の値を括弧で囲みます。
この構文は次のとおりです。
(lambda < parameters comma seperated > : expression) ( < parameters comma seperated > )
これらのラムダ関数を理解するために、2つの数値を乗算するラムダ関数を作成しましょう。これらの関数をすぐに呼び出して通常の Python 関数として使用できることを説明したように、例には両方のバージョンのラムダ関数が含まれます。
乗算の例については、次のコードを参照してください。
# Regular function calls
def multiply(a, b):
return a * b
print(multiply(1, 2))
print(multiply(10, 5))
print(multiply(10.5, 9.3))
print(multiply(0.945, -5.645))
print(multiply(1000e9, 0), end="\n\n")
# Inline invocation
print((lambda a, b: a * b)(1.1, 1.2))
print((lambda a, b: a * b)(10, 5))
print((lambda a, b: a * b)(10.5, 9.3))
print((lambda a, b: a * b)(0.945, -5.645))
print((lambda a, b: a * b)(1000e9, 0))
出力:
2
50
97.65
-5.334524999999999
0.0
1.32
50
97.65
-5.334524999999999
0.0
さらに正確にするために、数値のリストから奇数値をフィルタリングし、リストの要素の 2 乗を計算し、リストの要素の立方根を計算する 3つの例を考えてみましょう。
最初の例については、次の Python コードを参照してください。
x = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
y = [22, 44, 66, 88, 110]
z = [78, 9797, 97, 985, 75473, 2845, 74, 9964, 652, 124, 0, 6747]
# Regular function calls
def filter_odd(a):
return a % 2 != 0
print(list(filter(filter_odd, x)))
print(list(filter(filter_odd, y)))
print(list(filter(filter_odd, z)), end="\n\n")
# Inline invocation
print((lambda array: list(filter(lambda a: a % 2 != 0, array)))(x))
print((lambda array: list(filter(lambda a: a % 2 != 0, array)))(y))
print((lambda array: list(filter(lambda a: a % 2 != 0, array)))(z))
出力:
[1, 3, 5, 7, 9]
[]
[9797, 97, 985, 75473, 2845, 6747]
[1, 3, 5, 7, 9]
[]
[9797, 97, 985, 75473, 2845, 6747]
2 番目の例については、次の Python コードスニペットを参照してください。
x = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
y = [22, 44, 66, 88, 110]
z = [78, 9797, 97, 985, 75473, 2845, 74, 9964, 652, 124, 0, 6747]
# Regular function calls
def square(a):
return a ** 2
print(list(map(square, x)))
print(list(map(square, y)))
print(list(map(square, z)), end="\n\n")
# Inline invocation
print((lambda array: list(map(lambda a: a ** 2, array)))(x))
print((lambda array: list(map(lambda a: a ** 2, array)))(y))
print((lambda array: list(map(lambda a: a ** 2, array)))(z))
出力:
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
[484, 1936, 4356, 7744, 12100]
[6084, 95981209, 9409, 970225, 5696173729, 8094025, 5476, 99281296, 425104, 15376, 0, 45522009]
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
[484, 1936, 4356, 7744, 12100]
[6084, 95981209, 9409, 970225, 5696173729, 8094025, 5476, 99281296, 425104, 15376, 0, 45522009]
また、3 番目の例については、次の Python コードスニペットを参照してください。
x = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
y = [22, 44, 66, 88, 110]
z = [78, 9797, 97, 985, 75473, 2845, 74, 9964, 652, 124, 0, 6747]
# Regular function calls
def square(a):
return a ** (1 / 3)
print(list(map(square, x)))
print(list(map(square, y)))
print(list(map(square, z)), end="\n\n")
# Inline invocation
print((lambda array: list(map(lambda a: a ** (1 / 3), array)))(x))
print((lambda array: list(map(lambda a: a ** (1 / 3), array)))(y))
print((lambda array: list(map(lambda a: a ** (1 / 3), array)))(z))
出力:
[1.0, 1.2599210498948732, 1.4422495703074083, 1.5874010519681994, 1.7099759466766968, 1.8171205928321397, 1.912931182772389, 2.0, 2.080083823051904, 2.154434690031884]
[2.802039330655387, 3.530348335326063, 4.04124002062219, 4.4479601811386305, 4.791419857062784]
[4.272658681697917, 21.397565740522946, 4.594700892207039, 9.949747895601458, 42.2601016892268, 14.169703309060843, 4.198336453808407, 21.518462597981888, 8.671266460286839, 4.986630952238645, 0.0, 18.896015508976504]
[1.0, 1.2599210498948732, 1.4422495703074083, 1.5874010519681994, 1.7099759466766968, 1.8171205928321397, 1.912931182772389, 2.0, 2.080083823051904, 2.154434690031884]
[2.802039330655387, 3.530348335326063, 4.04124002062219, 4.4479601811386305, 4.791419857062784]
[4.272658681697917, 21.397565740522946, 4.594700892207039, 9.949747895601458, 42.2601016892268, 14.169703309060843, 4.198336453808407, 21.518462597981888, 8.671266460286839, 4.986630952238645, 0.0, 18.896015508976504]
Python Lambda 関数で複数の引数を渡す
ラムダ関数で複数の引数を渡すには、すべてのパラメーターをコンマで区切って指定する必要があります。例を挙げてこれを理解しましょう。
3つのパラメーターを受け取るラムダ関数を作成します。リストと 2つの整数。ラムダ関数は、最初の整数を加算し、各リスト要素から 2 番目の整数を減算します。
これについては、次の Python コードを参照してください。
x1 = [1, 8, 27, 64, 125, 216, 343, 512]
x2 = 5
x3 = 6
y1 = [11, 22, 33, 44, 55, 66, 77, 88, 99]
y2 = 4
y3 = 1
z1 = [78, 9797, 97, 985, 75473, 2845, 74]
z2 = 99
z3 = 99
# Regular function calls
def modify(a, b, c):
return [x + b - c for x in a]
print(modify(x1, x2, x3))
print(modify(y1, y2, y3))
print(modify(z1, z2, z3), end="\n\n")
# Inline invocation
print((lambda a, b, c: [x + b - c for x in a])(x1, x2, x3))
print((lambda a, b, c: [x + b - c for x in a])(y1, y2, y3))
print((lambda a, b, c: [x + b - c for x in a])(z1, z2, z3))
出力:
[0, 7, 26, 63, 124, 215, 342, 511]
[14, 25, 36, 47, 58, 69, 80, 91, 102]
[78, 9797, 97, 985, 75473, 2845, 74]
[0, 7, 26, 63, 124, 215, 342, 511]
[14, 25, 36, 47, 58, 69, 80, 91, 102]
[78, 9797, 97, 985, 75473, 2845, 74]
関連記事 - Python Function
- Python で関数を終了する
- Python のオプション引数
- Python Functools 部分関数
- Python ジェネレーターの Send 関数
- Python でステップ関数をあてはめる
- Python のファースト クラス関数