728x90
๋ฐ์ํ
ํ๋ก๊ทธ๋๋ฐ ์ธ๊ณ๋ฅผ ํ๊ตฌํฉ์๋ค.
<ํด๋ก์ (Closure)>
- ํจ์ ์์ ํจ์๋ฅผ ๋ง๋ค์ด์ ์ฌ์ฉํ๋ ๋ฐฉ์
- ํจ์ ์์ ์๋ ํจ์๋ ๋ฐ๊นฅ์ชฝ ํจ์์์ ์ฐธ์กฐํด์ ์ฌ์ฉํ๋ ๋ฐฉ์์ผ๋ก ์ ๊ทผํฉ๋๋ค.
- ํจ์ ์์ ํจ์๋ ์ฌ์ฉ์ด ๋๋๋ฉด ๋ฉ๋ชจ๋ฆฌ์์ ํด์ ๋๊ธฐ ๋๋ฌธ์ ์ ์ฉํ๊ฒ ์ฌ์ฉํ๋ฉด ์ข์ต๋๋ค.
ํด๋ก์ ํจ์ ์ ์ํ๊ธฐ
### ํด๋ก์ ํจ์ ์ ์ํ๊ธฐ
def outer_function(x) :
print(f"#1 : x = {x}")
### ๋ด๋ถ ํจ์ ์ ์ : ์ค์ ์คํ๋๋ ํจ์
def inner_function(y) :
print(f"#2 : y = {y}")
s = x + y
print(f"#3 : s = {s}")
return s
print("#4 -------")
return inner_function
ํด๋ก์ ํจ์ ํธ์ถํ๊ธฐ
### ํด๋ก์ ํจ์ ํธ์ถํ๊ธฐ
closure_exe = outer_function(10)
print(closure_exe)
# - closure_exe๋ inner_function ์์ฒด๋ฅผ ๋ฆฌํด๋ฐ์ ํจ์๋ฅผ ์๋ฏธํจ
๋ด๋ถ ํจ์ ํธ์ถํ๊ธฐ
### ๋ด๋ถ ํจ์ ํธ์ถํ๊ธฐ
result1 = closure_exe(5)
print(result1)
ํด๋ก์ ๋ฅผ ์ด์ฉํ์ฌ ๋์ ํฉ ๊ณ์ฐํ๊ธฐ
### ํด๋ก์ ๋ฅผ ์ด์ฉํ์ฌ ๋์ ํฉ ๊ณ์ฐํ๊ธฐ
# - ์ฌ์ฉํจ์๋ช
: outer_function(), inner_function2(num)
# - ์ฌ์ฉ๋ณ์ : total(๋์ ๋๊ฐ์ ์ ์ฅํ ๋ณ์)
def outer_function2() :
total = 0
print(f"#1 : total = {total}")
def inner_function2(num) :
### nonlocal : ํด๋ก์ ๊ตฌ์กฐ์์๋ ์์ ๋ณ์๋ฅผ ๋ด๋ถ ํจ์์์ ์ฌ์ฉ๋ชปํจ
# : ๋ฐ๋ผ์, nonlocal์ ์ง์ ํด์ ์ ์ํ๋ฉด ์ธ๋ถ ์์ญ์ ๋ณ์ ์ฌ์ฉ๊ฐ๋ฅ
nonlocal total
print(f"#2 : total = {total} / num = {num}")
total += num
print(f"#3 : total = {total} / num = {num}")
return total
print(f"#4-------------------------")
return inner_function2
์์ ํจ์ ํธ์ถ
### ์์ ํจ์ ํธ์ถ
res_fnc = outer_function2()
res_fnc
๋ด๋ถ ํจ์ ํธ์ถ
### ๋ด๋ถ ํจ์ ํธ์ถ
rs_total = res_fnc(5)
print(rs_total)
๋ด๋ถ ํจ์ ํธ์ถ
### ๋ด๋ถ ํจ์ ํธ์ถ
rs_total = res_fnc(10)
print(rs_total)
<์กฐ๊ฑด๋ถ ํด๋ก์ ํจ์ ํ๋ก๊ทธ๋๋ฐ>
def outer_function3(condition) :
def true_case():
return "true_case ํจ์๊ฐ ํธ์ถ๋์์ต๋๋ค."
def false_case():
return "false_case ํจ์๊ฐ ํธ์ถ๋์์ต๋๋ค."
# condition์ ๊ฐ์ด True์ด๋ฉด true_caseํจ์ ํธ์ถ
# False์ด๋ฉด false_caseํจ์ ์ ์
rs = true_case if condition else false_case
return rs
์์ ํจ์ ํธ์ถํ๊ธฐ
### ์์ ํจ์ ํธ์ถํ๊ธฐ
rs_function = outer_function3(True)
print(rs_function)
rs_functino = outer_function3(False)
print(rs_function)
rs_msg = rs_function()
print(rs_msg)
728x90
๋ฐ์ํ