파이썬 λ§ˆμŠ€ν„°ν•˜κΈ° : λžŒλ‹€(Lambda) ν•¨μˆ˜

Posted by Euisuk's Dev Log on May 9, 2023

파이썬 λ§ˆμŠ€ν„°ν•˜κΈ° : λžŒλ‹€(Lambda) ν•¨μˆ˜

원본 κ²Œμ‹œκΈ€: https://velog.io/@euisuk-chung/파이썬-μ‹œκ°ν™”-λ§ˆμŠ€ν„°ν•˜κΈ°-λžŒλ‹€Lambda-ν•¨μˆ˜

λžŒλ‹€(lambda) ν•¨μˆ˜λŠ” ν•¨μˆ˜ν˜• ν”„λ‘œκ·Έλž˜λ°μ—μ„œ μ€‘μš”ν•œ κ°œλ… 쀑 ν•˜λ‚˜λ‘œ, 읡λͺ… ν•¨μˆ˜(anonymous function)라고도 λΆ€λ¦…λ‹ˆλ‹€. λžŒλ‹€ ν•¨μˆ˜λŠ” 이름이 μ—†λŠ” ν•¨μˆ˜λ‘œ, 일반적으둜 ν•¨μˆ˜λ₯Ό ν•œ 번만 μ‚¬μš©ν•˜κ±°λ‚˜ ν•¨μˆ˜λ₯Ό 인자둜 전달해야 ν•˜λŠ” κ²½μš°μ— 맀우 μœ μš©ν•˜κ²Œ μ‚¬μš©λ©λ‹ˆλ‹€.

이번 λΈ”λ‘œκ·Έμ—μ„œλŠ” Pythonμ—μ„œ λžŒλ‹€ ν•¨μˆ˜μ˜ κ°œλ…κ³Ό ν™œμš© μ˜ˆμ œμ— λŒ€ν•΄ λ‹€λ£¨μ–΄λ³΄κ² μŠ΅λ‹ˆλ‹€.

λžŒλ‹€(lambda) ν•¨μˆ˜λž€?

λžŒλ‹€ ν•¨μˆ˜λŠ” λ‹€μŒκ³Ό 같은 ν˜•νƒœλ‘œ μ •μ˜λ©λ‹ˆλ‹€.

1
lambda 인자 : ν‘œν˜„μ‹

λžŒλ‹€ ν•¨μˆ˜λŠ” def ν‚€μ›Œλ“œλ₯Ό μ‚¬μš©ν•˜μ—¬ ν•¨μˆ˜λ₯Ό μ •μ˜ν•˜λŠ” 것보닀 κ°„κ²°ν•˜κ³  κ°„νŽΈν•œ λ°©μ‹μœΌλ‘œ ν•¨μˆ˜λ₯Ό μ •μ˜ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄, λ‹€μŒκ³Ό 같은 ν•¨μˆ˜κ°€ μžˆλ‹€κ³  κ°€μ •ν•΄λ΄…μ‹œλ‹€.

1
2
def add(x, y):
    return x + y

이 ν•¨μˆ˜λ₯Ό λžŒλ‹€ ν•¨μˆ˜λ‘œ λ°”κΎΈλ©΄ λ‹€μŒκ³Ό 같이 μž‘μ„±ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

1
add = lambda x, y: x + y

이제 add λ³€μˆ˜λŠ” λžŒλ‹€ ν•¨μˆ˜λ₯Ό μ°Έμ‘°ν•©λ‹ˆλ‹€.

λžŒλ‹€(lambda) ν•¨μˆ˜μ˜ ν™œμš© 예제

1. map() ν•¨μˆ˜μ™€ ν•¨κ»˜ μ‚¬μš©ν•˜κΈ°

map() ν•¨μˆ˜λŠ” μ‹œν€€μŠ€(리슀트, νŠœν”Œ λ“±)의 λͺ¨λ“  μš”μ†Œμ— ν•¨μˆ˜λ₯Ό μ μš©ν•œ κ²°κ³Όλ₯Ό λ°˜ν™˜ν•©λ‹ˆλ‹€. 이 λ•Œ, map() ν•¨μˆ˜μ™€ ν•¨κ»˜ λžŒλ‹€ ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜μ—¬ μ½”λ“œλ₯Ό κ°„κ²°ν•˜κ²Œ μž‘μ„±ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄, λ‹€μŒκ³Ό 같은 λ¦¬μŠ€νŠΈκ°€ μžˆλ‹€κ³  κ°€μ •ν•΄λ΄…μ‹œλ‹€.

1
mylist = [1, 2, 3, 4, 5]

이 리슀트의 각 μš”μ†Œμ— 2λ₯Ό κ³±ν•˜κ³ μž ν•œλ‹€λ©΄ λ‹€μŒκ³Ό 같이 map() ν•¨μˆ˜μ™€ λžŒλ‹€ ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

1
2
mylist2 = list(map(lambda x: x * 2, mylist))
print(mylist2)

μœ„ μ½”λ“œλŠ” map() ν•¨μˆ˜μ™€ λžŒλ‹€ ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜μ—¬ mylist 리슀트의 각 μš”μ†Œμ— 2λ₯Ό κ³±ν•œ κ²°κ³Όλ₯Ό mylist2 λ¦¬μŠ€νŠΈμ— μ €μž₯ν•©λ‹ˆλ‹€. 좜λ ₯ κ²°κ³ΌλŠ” λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.

1
[2, 4, 6, 8, 10]

2. filter() ν•¨μˆ˜μ™€ ν•¨κ»˜ μ‚¬μš©ν•˜κΈ°

filter() ν•¨μˆ˜λŠ” μ‹œν€€μŠ€(리슀트, νŠœν”Œ λ“±)의 λͺ¨λ“  μš”μ†Œ μ€‘μ—μ„œ 쑰건에 λ§žλŠ” μš”μ†Œλ§Œμ„ λ°˜ν™˜ν•©λ‹ˆλ‹€. 이 λ•Œ, filter() ν•¨μˆ˜μ™€ ν•¨κ»˜ λžŒλ‹€ ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜μ—¬ μ½”λ“œλ₯Ό κ°„κ²°ν•˜κ²Œ μž‘μ„±ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄, λ‹€μŒκ³Ό 같은 λ¦¬μŠ€νŠΈκ°€ μžˆλ‹€κ³  κ°€μ •ν•΄λ΄…μ‹œλ‹€.

1
mylist = [1, 2, 3, 4, 5]

이 λ¦¬μŠ€νŠΈμ—μ„œ ν™€μˆ˜λ§Œ μΆ”μΆœν•˜κ³  μ‹Άλ‹€λ©΄, λ‹€μŒκ³Ό 같이 filter() ν•¨μˆ˜μ™€ λžŒλ‹€ ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜μ—¬ ν™€μˆ˜λ§Œμ„ μΆ”μΆœν•  수 μžˆμŠ΅λ‹ˆλ‹€.

1
2
mylist2 = list(filter(lambda x: x % 2 == 1, mylist))
print(mylist2)

μœ„ μ½”λ“œλŠ” filter() ν•¨μˆ˜μ™€ λžŒλ‹€ ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜μ—¬ mylist 리슀트의 μš”μ†Œ μ€‘μ—μ„œ ν™€μˆ˜λ§Œμ„ μΆ”μΆœν•˜μ—¬ mylist2 λ¦¬μŠ€νŠΈμ— μ €μž₯ν•©λ‹ˆλ‹€. 좜λ ₯ κ²°κ³ΌλŠ” λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.

1
[1, 3, 5]

3. sorted() ν•¨μˆ˜μ™€ ν•¨κ»˜ μ‚¬μš©ν•˜κΈ°

sorted() ν•¨μˆ˜λŠ” μ‹œν€€μŠ€(리슀트, νŠœν”Œ λ“±)의 μš”μ†Œλ₯Ό μ •λ ¬ν•œ κ²°κ³Όλ₯Ό λ°˜ν™˜ν•©λ‹ˆλ‹€. 이 λ•Œ, sorted() ν•¨μˆ˜μ™€ ν•¨κ»˜ λžŒλ‹€ ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜μ—¬ μ •λ ¬ 기쀀을 μ§€μ •ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄, λ‹€μŒκ³Ό 같은 λ¦¬μŠ€νŠΈκ°€ μžˆλ‹€κ³  κ°€μ •ν•΄λ΄…μ‹œλ‹€.

1
mylist = ['apple', 'banana', 'cherry']

이 리슀트λ₯Ό 길이 순으둜 μ •λ ¬ν•˜κ³ μž ν•œλ‹€λ©΄ λ‹€μŒκ³Ό 같이 sorted() ν•¨μˆ˜μ™€ λžŒλ‹€ ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

1
2
mylist2 = sorted(mylist, key=lambda x: len(x))
print(mylist2)

μœ„ μ½”λ“œλŠ” sorted() ν•¨μˆ˜μ™€ λžŒλ‹€ ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜μ—¬ mylist 리슀트의 μš”μ†Œλ₯Ό 길이 순으둜 μ •λ ¬ν•œ κ²°κ³Όλ₯Ό mylist2 λ¦¬μŠ€νŠΈμ— μ €μž₯ν•©λ‹ˆλ‹€. 좜λ ₯ κ²°κ³ΌλŠ” λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.

1
['apple', 'cherry', 'banana']

4. reduce() ν•¨μˆ˜μ™€ ν•¨κ»˜ μ‚¬μš©ν•˜κΈ°

reduce() ν•¨μˆ˜λŠ” μ‹œν€€μŠ€(리슀트, νŠœν”Œ λ“±)의 λͺ¨λ“  μš”μ†Œλ₯Ό λˆ„μ μ μœΌλ‘œ κ³„μ‚°ν•œ κ²°κ³Όλ₯Ό λ°˜ν™˜ν•©λ‹ˆλ‹€. 이 λ•Œ, reduce() ν•¨μˆ˜μ™€ ν•¨κ»˜ λžŒλ‹€ ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜μ—¬ 계산 방식을 μ§€μ •ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄, λ‹€μŒκ³Ό 같은 λ¦¬μŠ€νŠΈκ°€ μžˆλ‹€κ³  κ°€μ •ν•΄λ΄…μ‹œλ‹€.

1
2
3
from functools import reduce

mylist = [1, 2, 3, 4, 5]

이 리슀트의 λͺ¨λ“  μš”μ†Œλ₯Ό κ³±ν•˜κ³ μž ν•œλ‹€λ©΄ λ‹€μŒκ³Ό 같이 reduce() ν•¨μˆ˜μ™€ λžŒλ‹€ ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

1
2
result = reduce(lambda x, y: x * y, mylist)
print(result)

μœ„ μ½”λ“œλŠ” reduce() ν•¨μˆ˜μ™€ λžŒλ‹€ ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜μ—¬ mylist 리슀트의 λͺ¨λ“  μš”μ†Œλ₯Ό κ³±ν•œ κ²°κ³Όλ₯Ό result λ³€μˆ˜μ— μ €μž₯ν•©λ‹ˆλ‹€. 좜λ ₯ κ²°κ³ΌλŠ” λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.

1
>>> 120

κ²°λ‘ 

μœ„ 예제λ₯Ό 톡해 Pythonμ—μ„œ λžŒλ‹€ ν•¨μˆ˜κ°€ μ–΄λ–»κ²Œ μ‚¬μš©λ˜λŠ”μ§€μ— λŒ€ν•΄ μ‚΄νŽ΄λ³΄μ•˜μŠ΅λ‹ˆλ‹€. λžŒλ‹€ ν•¨μˆ˜λŠ” ν•¨μˆ˜ν˜• ν”„λ‘œκ·Έλž˜λ°μ—μ„œ μ€‘μš”ν•œ κ°œλ… 쀑 ν•˜λ‚˜μ΄λ―€λ‘œ, ν•¨μˆ˜ν˜• ν”„λ‘œκ·Έλž˜λ°μ„ κ³΅λΆ€ν•˜μ‹œλŠ” 뢄듀은 λžŒλ‹€ ν•¨μˆ˜λ₯Ό κΌ­ μ΅ν˜€λ‘μ‹œκΈ°λ₯Ό μΆ”μ²œλ“œλ¦½λ‹ˆλ‹€.



-->