[Python] global, nonlocal (지역변수, 전역변수)

·2024년 3월 26일

global

전역 변수임을 명시하는 키워드

x=20

def func():
	global x
	print(x) #20

global 키워드를 사용하면 함수 내에서 전역 변수를 가져다 쓸 수 있음을 알 수 있다.

전역에서 선언된 변수가 없는 상황에서, 지역 스코프에서 사용할 경우

이 경우에는 아예 변수를 생성한다!

def func():
	global x
    x=30

print(x) # 30

nonlocal

현재 함수 바깥지역 변수임을 명시하는 키워드
지역변수 내에서만 사용할 수 있으며,
해당 이름의 변수를 찾을 때 까지 상위 변수를 탐색한다. (단, 어디까지 지역변수의 범위에서)

def a():
    x = 100
    y = 1000
    
    def b():
        x = 200
        
        def c():
            nonlocal x
            nonlocal y
            
            x = x + 300
            y = y + 3000

            print(x) # 500
            print(y) # 4000
        c()
    b()

a()

함수 c에서는 nonlocal로 x,y가 선언되어있으니,
바깥쪽에 위치한 변수를 찾는다.
x의 경우 바로 상위 함수 (func b)에서 초기화가 되었으므로 x=200으로 해석된다.

다만 y는 바로 상위 함수에서 찾을 수 없으므로, 그 상위 함수에서 초기화된 y를 해석한다.

profile
풀스택 호소인

0개의 댓글