Programming/Python

[Python] 전역변수, 지역변수 / global, nonlocal 총정리

킹우현 2023. 9. 28. 16:45

1) 전역 변수(Global variable)란

 

Global scope, 즉 전역 범위에서 활동하는 변수. 함수를 포함하여 스크립트 전체에서 모든 요소에 해당 변수에 접근할 수 있는 변수이다.

 

2) 지역 변수(Local variable)란

Local scope, 즉 지역 범위에서만 영향을 주고 받을 수 있는 변수를 지칭한다. 예를 들어 함수 안에서 a = 1이라고 변수 선언을 하게 되면 이제 a는 해당 함수 안에서만 사용될 수 있다.(a는 함수 Fn안에서만 선언이 되었기 떄문에 Fn()안에서만 영향을 끼친다.)

 

3) global 키워드

함수 안에서 전역 변수의 값을 변경하려면 global 키워드를 사용해 선언을 해주면 된다.

 

주의점 🚨

반드시 " global a "와 같이 선언을 먼저 한 뒤에 변수의 값을 넣어줄 수 있다. 

 

전역 변수가 없을 때 global 키워드를 사용한 경우

함수 안에 global + 변수 선언을 하면 해당 변수는 전역 변수가 된다. 

 

4) nonlocal 키워드

전역 변수를 불러오는 키워드가 global 이었다면 지역 변수를 불러오기위해서는 nonlocal을 사용한다. 

 

말그대로 해당 변수는 'local이 아니다'고 선언해주는 키워드다. 즉 상위 함수에 변수를 참조한다고 미리 선언한다는 것이다.

 

5) 'global' vs 'nonlocal'

global 변수 : 일반 함수 내에서 전역 변수를 사용할 때 사용

noncocal 변수 : 중첩 함수 내에서 상위 함수의 변수를 사용할 때 사용

 

c = 11
def test():
   a = 3
   b = 9

   def sum():
       nonlocal a
       global b
       a = 7        # nonlocal 변수는 상위 변수의 접근 O
       b = 11       # global 변수는 중첩함수내에서 상위 함수의 변수는 접근 X

       global c
       c = 13       # global 변수는 함수 외부의 변수는 접근 가능
       return True

   sum()
   return a, b, c

result = test()
print(result)     # (7, 9 , 13) 출력

따라서 만약 함수내의 중첩함수에서 상위 함수의 변수를 global로 접근하려고 하면 의도대로 실행되지 않는다.(프로그래머스는 함수 리턴 식으로 코드가 제출되므로 조심할 것) ⭐️