๐Ÿ—‚๏ธ

4.7.3. lambda

1. lambda

lambda( )๋Š” ์ต๋ช…ํ•จ์ˆ˜๋ผ๊ณ  ํ•˜๋ฉฐ, ์ด๋ฆ„์ด ์—†๋Š” ํ•จ์ˆ˜์ž…๋‹ˆ๋‹ค. ๊ฐ„๋‹จํ•œ ์˜ˆ์ œ๋กœ ์„ค๋ช…๋“œ๋ ค ๋ณผ๊ฒŒ์š”.
print() ๋Š” ์ด๋ฆ„์ด ์žˆ๋Š” ํ•จ์ˆ˜์ž…๋‹ˆ๋‹ค.
hojun = print hojun('hello world') #์ถœ๋ ฅ๊ฐ’ #hello world
print ๋ฅผ hojun์œผ๋กœ ๋ฐ›๊ณ  printํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฆ‰, ์ด๋ฆ„์ด ์žˆ๋‹ค๋Š” ๋œป์€ ํ•จ์ˆ˜๋ฅผ ๊ฐ€๋ฅดํ‚ค๊ณ  ์žˆ๋Š” '๋ณ€์ˆ˜๋ช…' ์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋ผ์š”.
ย 
ํ•œ๊ฐ€์ง€ ์˜ˆ์ œ๋ฅผ ๋” ์‚ดํŽด๋ณด๋„๋ก ํ• ๊ฒŒ์š”.
์ž…๋ ฅ
def add(x, y): return x + y def sub(): pass def div(): pass def mul(): pass caculator = [add, sub, div, mul] print(caculator[0](10, 20))#0๋ฒˆ์งธ ๊ฐ’์€ add ์ž…๋‹ˆ๋‹ค.
ย 
์ถœ๋ ฅ
30
์šฐ์„  add, sub, div, mul์ด๋ผ๋Š” ์‚ฌ์น™์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ํ•จ์ˆ˜๋ฅผ ์„ ์–ธํ•ด์ฃผ์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ ๋‹ค์Œ ๊ฐ ํ•จ์ˆ˜๋“ค์˜ ์ด๋ฆ„์„ calculator๋ผ๋Š” ๋ฐฐ์—ด์— ๋„ฃ์–ด์ฃผ์—ˆ๊ณ , print๋กœ 0๋ฒˆ์งธ ๋ฐฐ์—ด์„ ํ˜ธ์ถœํ•˜์˜€๋”๋‹ˆ ํ•จ์ˆ˜ add์˜ ๊ฒฐ๊ณผ๊ฐ’์ธ 30์ด ๋‚˜์˜ค๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
์šฐ๋ฆฌ๊ฐ€ ์ผ๋ฐ˜์ ์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ณ€์ˆ˜์˜ ์œ„์น˜์— ( )(๊ด„ํ˜ธ)๋งŒ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด ๋ณ€์ˆ˜์ฒ˜๋Ÿผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ํ˜ธ์ถœํ•  ๋•Œ๋Š” '( )'(๊ด„ํ˜ธ)๋ฅผ ์‚ฌ์šฉํ•ด์ค๋‹ˆ๋‹ค.
ย 
๊ทธ๋Ÿผ lambdaํ•จ์ˆ˜๋Š” ์™œ ์ต๋ช…ํ•จ์ˆ˜ ์ผ๊นŒ์š”? ์ด๋ฆ„์ด ์žˆ๋Š” ํ•จ์ˆ˜๋“ค๊ณผ๋Š” ๋‹ค๋ฅด๊ฒŒ ๋งค์šฐ ๊ฐ„๊ฒฐํ•˜๊ฒŒ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.
lambda ๋งค๊ฐœ๋ณ€์ˆ˜ : ๊ฒฐ๊ณผ
์ด๋ ‡๊ฒŒ ๋‹จ ํ•œ์ค„๋กœ ํ•จ์ˆ˜์˜ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์–ด์š”! ๋˜ํ•œ lambdaํ•จ์ˆ˜๋Š” return์ด๋ผ๋Š” ํ‚ค์›Œ๋“œ๋ฅผ ์ž…๋ ฅํ•˜์ง€ ์•Š์•„๋„ ๊ฒฐ๊ณผ ๋ถ€๋ถ„์„ ํ†ตํ•ด ์ž๋™์œผ๋กœ returnํ•ด์ค๋‹ˆ๋‹ค.
์˜ˆ์ œ๋ฅผ ๋ณผ๊ฒŒ์š”.
์ž…๋ ฅ
์ œ๊ณฑ = lambda x : x ** 2 ์ œ๊ณฑ(3)
ย 
์ถœ๋ ฅ
9
ย 
lambda( )ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•˜์—ฌ x๋ผ๋Š” ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ๋“ค์–ด์˜ค๋ฉด x ** 2 ๋ฅผ ํ•œ ๋’ค returnํ•˜๋ผ๋Š” ๋œป์ž…๋‹ˆ๋‹ค.
ย 
์ž…๋ ฅ
(lambda x : x ** 2)(3)
ย 
์ถœ๋ ฅ
9
ย 
์œ„ ์˜ˆ์ œ์ฒ˜๋Ÿผ ์ธ์ˆ˜๋„ ๋ฐ”๋กœ ๋Œ€์ž…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
ย 
์ฆ‰ lambda๋Š” ์ต๋ช… ํ•จ์ˆ˜๋ผ๋Š” ์ด๋ฆ„์ฒ˜๋Ÿผ ํ•จ์ˆ˜์˜ ์ด๋ฆ„์„ ์ •ํ•˜์ง€ ์•Š๊ณ  lambda๋ผ๋Š” ํ‚ค์›Œ๋“œ๋ฅผ ์ด์šฉํ•ด ํ•จ์ˆ˜์ฒ˜๋Ÿผ ์ด์šฉํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๋œป์ž…๋‹ˆ๋‹ค!

2. map( )

lambda ํ•จ์ˆ˜์™€ ๊ฐ€์žฅ ๋งŽ์ด ์กฐํ•ฉ๋˜์–ด ์ด์šฉํ•˜๋Š” ํ•จ์ˆ˜์ž…๋‹ˆ๋‹ค. ๊ฐ„๋‹จํžˆ ์„ค๋ช…๋“œ๋ฆฌ๋„๋ก ํ• ๊ฒŒ์š”.
๋ฐฉ๊ธˆ ์œ„์—์„œ ๋งŒ๋“ค์—ˆ๋˜ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์ œ๊ณฑํ•˜์—ฌ returnํ•˜๋Š” ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“ค์–ด ๋ณผ๊ฒ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ์•„๊นŒ ์œ„์—์„œ ์ž‘์„ฑํ–ˆ๋˜ ์˜ˆ์ œ๋Š” ํ•˜๋‚˜์˜ ๊ฐ’๋งŒ ๋ฐ›๊ณ  ํ•˜๋‚˜์˜ ๊ฐ’๋งŒ ๋ฆฌํ„ดํ•  ์ˆ˜ ์žˆ์—ˆ์ฃ ?
์—ฌ๋Ÿฌ๊ฐ’์ด ๋“ค์–ด์˜ค๊ฒŒ ๋œ๋‹ค๋ฉด ์–ด๋–ป๊ฒŒ ํ•ด์•ผํ• ๊นŒ์š”?
์ž…๋ ฅ
# ์ฒซ๋ฒˆ์งธ ๋ฐฉ๋ฒ• def ์ œ๊ณฑ(x): return x ** 2 list(map(์ œ๊ณฑ, [1, 2, 3, 4])) # ๋‘๋ฒˆ์งธ ๋ฐฉ๋ฒ• list(map(lambda x : x ** 2, [1, 2, 3, 4]))
ย 
์ถœ๋ ฅ
[1, 4, 9, 16]
ย 
์ฒซ๋ฒˆ์งธ ๋ฐฉ๋ฒ•์ฒ˜๋Ÿผ ์ด๋ฆ„์ด ์žˆ๋Š” '์ œ๊ณฑ'ํ•จ์ˆ˜๋ฅผ ์ƒˆ๋กœ ์ •์˜ํ•˜์—ฌ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•๋„ ์žˆ๊ณ , lambdaํ•จ์ˆ˜๋ฅผ ์ •์˜ํ•˜์—ฌ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๋‹ค.
๋‘ ๋ฐฉ๋ฒ• ๋‹ค map()ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•˜์˜€๋Š”๋ฐ์š”, map์€ ๋ฆฌ์ŠคํŠธ์˜ ์š”์†Œ๋“ค์„ ์ง€์ •๋œ ํ•จ์ˆ˜๋กœ ์ฒ˜๋ฆฌํ•ด์ฃผ๋Š” ํ•จ์ˆ˜์ž…๋‹ˆ๋‹ค.
์ฆ‰, ์šฐ๋ฆฌ๋Š” [1,2,3,4]๋ผ๋Š” ๋ฆฌ์ŠคํŠธ ์š”์†Œ๋“ค์„ '์ œ๊ณฑ' ํ˜น์€ 'lambda x:x**2'๋ผ๋Š” ํ•จ์ˆ˜๋กœ ์ฒ˜๋ฆฌํ•˜๋„๋ก ํ•˜์˜€์Šต๋‹ˆ๋‹ค.
ย 
map์˜ ์‚ฌ์šฉ๋ฐฉ๋ฒ•์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.
map(ํ•จ์ˆ˜, ๋ฆฌ์ŠคํŠธ ํ˜น์€ ํŠœํ”Œ)
ย 

3. filter( )

์ด๋ฒˆ์—๋Š” lambda์™€ filter๋ฅผ ์‚ฌ์šฉํ•ด๋ณด๋„๋ก ํ• ๊ฒŒ์š”.
์ž…๋ ฅ
list(filter(lambda x : x > 50, range(100)))
ย 
์ถœ๋ ฅ
[51, 52, 53, . . . ]
filter ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•˜์—ฌ 50๋ณด๋‹ค ํฐ x๊ฐ’์„ ์ถœ๋ ฅํ•˜๋„๋ก ํ•˜์˜€์Šต๋‹ˆ๋‹ค.
ย 
ย 

4. ์‹ค์ „ ๋ฌธ์ œ

์•„๋ž˜ ๋ฌธ์ œ๋ฅผ ํ’€์–ด๋ณด์„ธ์š”!
'์ˆซ์ž' ๋ฐฐ์—ด์„ '์Šน์ˆ˜' ๋ฐฐ์—ด๊ณผ ์ง์ง€์–ด์„œ ์Šน์ˆ˜๋งŒํผ ์ œ๊ณฑ์„ ์‹œ์ผœ์ค„ ๊ฒƒ ์ž…๋‹ˆ๋‹ค.
๋‹ต์€ ํ•˜๋‹จ์— ์žˆ์œผ๋‹ˆ ๊ผญ ๋ฌธ์ œ๋ฅผ ํ’€์–ด๋ณด์‹œ๊ณ  ํ™•์ธํ•ด์ฃผ์„ธ์š”:)
ย 
์ž…๋ ฅ
์ˆซ์ž = [1, 2, 3, 4, 5] ์Šน์ˆ˜ = [2, 2, 2, 3, 3] #๋ฌธ์ œ #1. ์ˆซ์ž์˜ ์Šน์ˆ˜๋ฅผ zip์œผ๋กœ ๋งตํ•‘ํ•ด์„œ ์ง„ํ–‰ํ•˜์„ธ์š”. #2. ์ˆซ์ž๋ฅผ ์Šน์ˆ˜๋งŒํผ ์Šน์ˆ˜ํ•˜์—ฌ ๊ฒฐ๊ณผ๊ฐ’์„ ํ‘œํ˜„ํ•ด์ฃผ์„ธ์š”. #3. ์Šน์ˆ˜ํ•œ ๊ฐ’์ด 100์ด์ƒ์ธ ๊ฐ’์„ ์ถœ๋ ฅํ•˜์„ธ์š”. #4. ์Šน์ˆ˜ํ•œ ๊ฐ’์„ ๋ชจ๋‘ ๋”ํ•˜์„ธ์š”.
ย 
์ถœ๋ ฅ
# ๊ฒฐ๊ณผ๊ฐ’์€ ๋‹ค์Œ๊ณผ ๊ฐ™์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค. # 1. ์ˆซ์ž์˜ ์Šน์ˆ˜๋ฅผ zip์œผ๋กœ ๋งตํ•‘ํ•ด์„œ ์ง„ํ–‰ํ•˜์„ธ์š”. [(1, 2), (2, 2), (3, 2), (4, 3), (5, 3)] # 2. ์ˆซ์ž๋ฅผ ์Šน์ˆ˜๋งŒํผ ์Šน์ˆ˜ํ•˜์—ฌ ๊ฒฐ๊ณผ๊ฐ’์„ ํ‘œํ˜„ํ•ด์ฃผ์„ธ์š”. [1, 4, 9, 64, 125] # 3. ์Šน์ˆ˜ํ•œ ๊ฐ’์ด 100์ด์ƒ์ธ ๊ฐ’์„ ์ถœ๋ ฅํ•˜์„ธ์š”. [125] # 4. ์Šน์ˆ˜ํ•œ ๊ฐ’์„ ๋ชจ๋‘ ๋”ํ•˜์„ธ์š” 203
ย 
ย 
ย 
ย 
ย 

์ •๋‹ต

์ž…๋ ฅ
# 1. ์ˆซ์ž์˜ ์Šน์ˆ˜๋ฅผ zip์œผ๋กœ ๋งตํ•‘ํ•ด์„œ ์ง„ํ–‰ํ•˜์„ธ์š”. list(zip(์ˆซ์ž, ์Šน์ˆ˜)) # 2. ์ˆซ์ž๋ฅผ ์Šน์ˆ˜๋งŒํผ ์Šน์ˆ˜ํ•˜์—ฌ ๊ฒฐ๊ณผ๊ฐ’์„ ํ‘œํ˜„ํ•ด์ฃผ์„ธ์š”. list(map(lambda x: x[0] : x[1], zip(์ˆซ์ž, ์Šน์ˆ˜))) # 3. ์Šน์ˆ˜ํ•œ ๊ฐ’์ด 100์ด์ƒ์ธ ๊ฐ’์„ ์ถœ๋ ฅํ•˜์„ธ์š”. list(filter(lambda x : x > 100, list(map(lambda x : x[0] ** x[1], zip(์ˆซ์ž, ์Šน์ˆ˜))))) # 4. ์Šน์ˆ˜ํ•œ ๊ฐ’์„ ๋ชจ๋‘ ๋”ํ•˜์„ธ์š” sum(map(lambda x : x[0] ** x[1], zip(์ˆซ์ž, ์Šน์ˆ˜)))
ย