π λ€λ₯Έ scopeμ μλ λ³μλ₯Ό μ¬μ©ν λ λ¬Έμ
case 1. λ λμ λ²μμ μλ λ³μ 'μ½κΈ°'λ κ°λ₯
- μλμ κ°μ΄ μ μλ³μλ‘ nμ μ μΈνκ³ μ΄λ₯Ό ν¨μ λ΄μμ μ½κΈ°λ§ νλ κ²½μ° μλ¬κ° λμ§ μλλ€.
n = 0
def func():
print(n) # 0
func()
- μλμ κ°μ κ²½μ°λ λ§μ°¬κ°μ§μ΄λ€. μ μ λ³μλ μλκ³ func2λ₯Ό κ°μΈκ³ μλ func1μμ μ€μ ν λ³μμ§λ§ func2 λ΄λΆμμ μ¬μ©μ΄ κ°λ₯νλ€.
def func1():
n = 1
def func2():
print(n) # 1
func2()
func1()
- μ΄λ κ² λ³μλ₯Ό μ μΈν κ³³λ³΄λ€ μμͺ½μ μμΉν ν¨μμμλ λ³μλ₯Ό μ½μ μ μλ€.
case2. λ λμ λ²μμ μλ λ³μ 'λ³κ²½'μ λΆκ°λ₯
n = 0
def func():
n += 1 # error
print(n)
func()
def func1():
n = 1
def func2():
n += 1 # error
print(n)
func2()
func1()
- μ λ μ½λ λͺ¨λ μ€νν΄λ³΄λ©΄ UnboundLocalError: local variable 'n' referenced before assignment μλ¬κ° λ°μνλ€.
- λ λμ λ²μμ μλ λ³μλΌλ, νμ¬ scope λ°μμ μ μΈν λ³μλΌλ©΄, νΈμ§ν μ μλ€.
π global
n = 1
def func1():
def func2():
global n
n += 1
print(n) # 2
func2()
func1()
- nμ μ μλ³μλ‘ μ μΈν΄μ£Όκ³ ν¨μ λ΄λΆμμ νΈμ§μ μν λ, 'λλ μ§κΈ ν¨μ λ΄μ nμ΄ μλ μ μλ³μ nμ μΈκ±°μΌ'λΌλ μλ―Έλ‘ global nμ΄λΌκ³ μ μΈν΄μ£Όλ©΄ λ¬Έμ μμ΄ μ¬μ©μ΄ κ°λ₯νλ€.
π₯ μ μ λ³μκ° μλ κ²½μ°
def func1():
n = 1
def func2():
global n
n += 1
print(n) # error
func2()
func1()
- λ§μ½ μμ κ°μ΄ μ μ λ³μ nμ΄ μλ λ³μμ global ν€μλλ‘ μ§μ ν΄μ€λ€λ©΄ NameError: name 'n' is not definedμλ¬κ° λ°μνλ€.
- μ΄λ μ μλ³μλ‘ μ μΈλ nμ΄ μκΈ° λλ¬Έμ΄λ€.
- μ΄λ° κ²½μ°λ globalμ΄ μλ nonlocal ν€μλλ₯Ό μ¬μ©ν΄μΌνλ€.
π nonlocal
def func1():
n = 1
def func2():
nonlocal n
n += 1
print(n) # 2
func2()
func1()
- μμ κ°μ΄ νμ¬μ scopeλ΄μ μ§μλ³μκ° μλκ³ , μ μλ³μλ μλ λ³μ nμ μ¬μ©ν λλ nonlocalν€μλλ₯Ό μ¨μ€λ€.
- 'λλ μ§κΈ μ§μλ³μλ μλ λ³μλ₯Ό μ¬μ©ν κ±°μΌ'λΌλ μλ―Έλ‘ nonlocal nμ΄λΌκ³ μ€μ ν΄μ£Όλ©΄ λ¬Έμ μμ΄ μ¬μ© κ°λ₯νλ€.
λ°μν
'python' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[Python] μμ 볡μ¬κ° μΌμ΄λλ κ²½μ° (0) | 2021.04.17 |
---|