본문 바로가기

Programming/Python

[PYTHON] Variable Scope를 알아보자 🌱

Variable Scope

말 그대로 변수의 영역을 말한다. 컴퓨터 프로그래밍에서 변수 영역은 변수가 유효성을 갖는 영역을 가리킨다. 프로그램은 영역을 벗어난 변수를 가리킬 수 없다(위키백과). 
 
파이썬에서 변수는 세가지 영역으로 선언할 수 있다.

  • Global Variable
  • Local Variable
  • Nonlocal Variable

 
 

Global Variable

전역 변수는 주로 변하지 않는 값을 선언할 때 사용한다. 함수 안과 밖에서 모두 읽을 수 있다.

a = 10 

def foo():
    print ('Ex1 > ', a)

foo()
# Ex1 >  10

print ('Ex1 > ', a)
# Ex1 >  10

 
 
단, 아래와 같이 함수 내에서 전역 변수 값을 변경할 수 는 없다. 값을 변경하고 싶은 경우 함수 내에서 global 예약어를 사용할 수 있지만, 이 경우 에러가 발생했을 때 유지보수하기 어려울 수 있다.

b = 40

def foobar():
    b = b + 10
    print('Ex2 > ', b)

foobar()
# UnboundLocalError: local variable 'c' referenced before assignment

 
 

Local Variable

지역 변수는 함수 내에서 선언해 사용한다. 함수 밖에서 읽을 수 없다, 즉 함수의 실행이 끝나면 사라진다. 

c = 20

def bar():
    c = 30
    print('Ex3 > ', c)

bar()
# Ex3>  30

print ('Ex3 > ', c)
# Ex3>  20

 
 

Nonlocal Variable

비지역 변수는 아래와 같이 중첩된 함수에서 나타난다. 전역 변수 값을 함수 내부에서 변경하기 위해 global 예약어를 사용했듯, 비지역 변수 값을 중첩함수 내부에서 변경하기 위해 nonlocal 예약어를 사용한다. 

def outer():
    d = 70
    # inner 함수 입장에서 nonlocal scope
    def inner():
        nonlocal d
        d += 10 
        print('Ex4 > ', d)
    return inner

in_test = outer() # python closure

in_test()
# Ex4 >  80

in_test()
# Ex4 >  90
# python closure 참고

 
원하는 영역의 변수를 확인하기 위해서 locals() 또는 globals()를 사용할 수 있다(변수와 값을 딕셔너리 형태로 반환).