IT/Python
[Python] ν΄λ‘μ (Closure) νλ‘κ·Έλ¨
ITyranno
2023. 11. 14. 12:27
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
λ°μν