[Python] λλ€ (lambda)
κ°λ
λλ€(lambda)λ?
μ΅λͺ ν¨μ
Pythonμμλ λλ€ ν¨μλ₯Ό ν΅ν΄ μ΄λ¦ μλ ν¨μλ₯Ό λ§λ€ μ μλ€.
λλ€ ν¨μμ μ₯μ
- μ½λμ κ°κ²°ν¨
- λ©λͺ¨λ¦¬μ μ μ½
λλ€ ν¨μλ μ μμ λμμ μ¬μ©ν μ μλ λ°λ©΄, ν¨μμ μ΄λ¦μ΄ μκ³ μ μ₯λ λ³μκ° μκΈ° λλ¬Έμ λ€μ μ¬μ©ν μλ μλ€.
νμ© λ°©λ²
λλ€ ν¨μλ lambda λ§€κ°λ³μ : ννμ μ νμμΌλ‘ μ¬μ©νλ©΄ λλ€.
μμ 1μ ν΅ν΄ μμμ λ§ν def λ₯Ό νμ©ν ν¨μ μμ± λ°©λ²κ³Ό lambdaλ₯Ό νμ©ν ν¨μ μμ± λ°©λ²μ λΉκ΅ν΄λ³΄μ.
νμ© μμ 1. μΈμλ‘ λ°μ κ°μ 10μ λν΄ λ°ννκΈ°
1) def ν¨μ
def plus_ten(x):
return x + 10
print(plus_ten(1)) # => 11
2) lambda μ΅λͺ ν¨μ
print((lambda x: x + 10)(1)) # => 11
μ΄λ κ² λλ€ν¨μλ λλ€ ννμ μ체λ₯Ό νΈμΆν μλ μκ³ ,
plus_ten = lambda x: x + 10
print(plus_ten(1)) # => 11
μ΄λ κ² λλ€ννμμ λ³μμ ν λΉν΄μ€ μ λ μλ€. μ΄λ 1)μ²λΌ ν¨μλ‘ νμ©ν μ μλλ°, κ·Έλ¦ΌμΌλ‘ λΉκ΅νλ©΄ λ³΄λ€ μ½κ² μ΄ν΄ν μ μλ€.
π‘ def ν¨μ vs lambda μ΅λͺ ν¨μ

# λλ€ ννμ λ΄μ λ³μ μ§μ -> Error
print(lambda x: y=10; x+y)(1)) # => SyntaxError: invalid syntax
# λλ€ ννμ μΈλΆμ λ³μ μ¬μ©
z = 10
print((lambda x: x + z)(1)) # => 11
νμ© μμ 2. λ μμμ ν©μ ꡬνκΈ°
print((lambda x,y: x + y)(10, 20)) # => 30
μμ 3. μλ€ λΆνμν 곡백μ μ μΈν λ¬Έμμ κΈΈμ΄λ‘ μ λ ¬νκΈ°
target = [' cat ', ' tiger ', ' dog', 'snake ']
print(sorted(target, key=lambda x : len(x.strip())))
μ¬λ¬ ν¨μμμ νμ©
λλ€ ννμμ μ¬μ©νλ μ΄μ λ ν¨μμ μΈμ λΆλΆμμ κ°λ¨νκ² ν¨μλ₯Ό λ§λ€κΈ° μν΄μμ΄λ€. μ΄λ° λ°©μμΌλ‘ μ¬μ©νλ λνμ μΈ μκ° mapμ΄λ€. μ°μ map ν¨μμ λν΄ μ νν μ΄ν΄νκΈ° μνμ¬, def ν¨μλ₯Ό νμ©νμ¬ mapμ νμ© μμλ₯Ό μ΄ν΄λ³΄μ.
1. map()
map(ν¨μ, 리μ€νΈ) → 리μ€νΈμ μμλ€μ νλμ© κΊΌλ΄ ν¨μλ₯Ό μ μ©μν¨ ν, μλ‘μ΄ λ¦¬μ€νΈμ λ΄μμ€λ€.
1-1. νμ© : lambda + map()
def plus_ten(x):
return x + 10
print(list(map(plus_ten, [1, 2, 3]))) # => [11, 12, 13]
λ³΄ν΅ mapν¨μλ₯Ό νμ©ν λμλ map(str, [1, 2, 3])κ³Ό κ°μ΄ μλ£νμ λ³κ²½ν λμλ§ μμ£Ό νμ©νλλ°, μ΄λ κ² ν¨μλ₯Ό μ§μ λ§λ€μ΄μ λ£μ΄λ 무방νλ€.
1-2. νμ© : lambda + map()
list(map(lambda x: x + 10, [1, 2, 3])) # => [11, 12, 13]
list(map(lambda x: x ** 2, range(5))) # => [0, 1, 4, 9, 16]
μ 체μ μΌλ‘ 보면 1-1μ λΉνμ¬ μ½λκ° μΈ μ€μμ ν μ€λ‘ μ€μ΄λ κ²μ νμΈν μ μλ€. μ΄μ²λΌ λλ€ ννμμ ν¨μλ₯Ό λ€λ₯Έ ν¨μμ μΈμλ‘ λ£μ λ λ§€μ° νΈλ¦¬νλ€.
π‘ μ¬κΈ°μ μ κΉ! ν¨μμ μΈμμ μΈμλ?

- μΈμ (parameter) : ν¨μλ₯Ό μ μν λ μΈλΆλ‘λΆν° λ°μλ€μ΄λ μμμ κ°. μμ κ·Έλ¦Όμμ μΈμκ°μ x, y (μΈμκ° = λ§€κ°λ³μ)
- μΈμ (argument) : ν¨μλ₯Ό νΈμΆν λ μ¬μ©λλ κ°. μμ κ·Έλ¦Όμμ μΈμλ 2, 5
# λ§€κ° λ³μκ° μλ λλ€ ννμ
(lambda : 1)() # => 1
x = 10
(lambda : x)() # => 10
2. reduce()
reduceλΌλ λ¨μ΄μ μ°μ° λ°©μμ΄ λ§€μΉκ° μ λμ§ μμ§λ§, μνμ€μ μμκ° λμ λλ©° μ€μ΄λ€κΈ° λλ¬Έμ΄λΌκ³ μ΄ν΄νλ©΄ μ½λ€.
reduce(ν¨μ, μνμ€) : μνμ€(λ¬Έμμ΄, 리μ€νΈ, νν)μ μμλ€μ λμ μ μΌλ‘ ν¨μμ μ μ©μν¨λ€.
from functools import reduce
reduce(lambda x, y: x + y, [0, 1, 2, 3, 4]) # => 10
3. filter()
filter(ν¨μ, 리μ€νΈ) : 리μ€νΈμ μμλ€μ ν¨μμ μ μ©μμΌμ κ²°κ³Όκ° μ°ΈμΈ κ°λ€λ‘ μλ‘μ΄ λ¦¬μ€νΈλ₯Ό 리ν΄
# 5 μ΄νμ μμλ§ νν°λ§νκΈ°
list(filter(lambda x: x < 5, range(10))) # => [0, 1, 2, 3, 4]
# νμλ§ νν°λ§νκΈ°
list(filter(lambda x: x % 2, range(10))) # => [1, 3, 5, 7, 9]
μ°Έκ³ μ¬μ΄νΈ
- μ λλ‘ νμ΄μ¬ (https://wikidocs.net/22804)
- μμ΄λ³΄λ₯Ό μν Python: μ½κ² νμ΄ μ΄ κΈ°μ΄ λ¬Έλ²κ³Ό μ€μ΅ (https://wikidocs.net/64)
- μ½λ© λμ₯ (https://dojang.io/mod/page/view.php?id=2359)