[Python] 전역 변수 지역 변수 사용법 총 정리/ global, nonlocal
본문 바로가기
Python/Python 공부 정리

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

by 쏠수있어ㅤ 2021. 6. 13.
반응형

 

Python, Global variable = 파이썬 전역 변수란 ? 

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

 

위의 a 는 전역 변수이다. 실행하는 파이썬 전체 영역에서 사용할 수 있기 때문에 이름도 '전역'으로체 영으로 생각하면 쉬울 것 같다. a = 1 이라고 전역변수 a를 첫 줄에 선언하고 그리고 함수 Fn 에서 해당 전역 변수 a의 값을 print 하라고 설정했다. 전역변수이므로 6, 7번 줄에서 모두 출력이 된다! 

 

 

전역 변수의 범위 

 

 


 

 

 

Python, Local variable = 파이썬 지역 변수란 ? 

 - 지역 변수란 Local scope, 지역 범위에서만 영향을 주고 받을 수 있는 변수를 지칭한다. 예를 들어 함수 안에서 a = 1이라고 변수 선언을 하게 되면 이제 a는 해당 함수 안에서만 사용될 수 있다. 아래 예시 ↓↓ 를 보면 더 이해가 잘 간다. 

 

 

Fn 이라는 함수 안에 a 라는 변수에 1을 선언하고 함수 안에서 print(a)를 했다. -> Fn() 함수 실행 -> a=1이 선언되었으므로 print(a)가 출력이 된다 ! 

그리고 6번째 줄의 print(a)는 실행 전에 이미 스크립스 상에서 빨간색으로 밑줄이 그어져 있다. print할 a를 찾을 수 없어서 console은 오류가 난다. a는 함수 Fn안에서만 선언이 되었기 떄문에 Fn()안에서만 영향을 끼친다. 

 

 

지역 변수의 범위 

 

 

 


 

 

 

전역 변수와 지역 변수를 구분해서 사용해야 하는 이유 

코딩 테스트 공부를 하다 보니 전역 변수와 지역 변수를 구분해서 값을 도출해내야 할 때가 자주 있었다. 아래의 변수 값 변경을 해보며 좀 더 전역 변수와 지역 변수를 이해할 수 있었다. 

 

 

전역 변수 값 변경 ? 

 

코드 풀이 : 첫번째 줄에 전역 변수로 a = 1 선언을 해주었다. (함수 등에 들어가 있지 않음)

그리고 함수 Fn 안에서 a = 2 라고 값을 바꾸었다. --> 요 의미는 1번째 줄의 전역 변수 a의 값을 바꿨다라기보다 함수 Fn 안에 a라는 변수를 새로 선언한 것에 가깝다. 함수 안에서 선언한 a는 함수를 벗어난 어떠한 코드에도 영향을 주지 않기 때문에 첫 번째 줄의 a와 무관하다고 볼 수 있다. 

7번째 줄 : Fn() 함수 실행으로 첫 번째 줄을 무시하고 바로 def Fn(): ~ 의 내용을 실행하면 ---> a = 2  #  2가 출력이 된다. 

8번째 줄 : print(a) --> 이 명령은 a를 출력하는 것인데 a는 첫 번째 줄의 a = 1 (전역 변수)를 가리키게 된다. (함수 Fn()과 무관) 

 

 

 

 

 

전역 변수를 특정 함수에 가져올 순 없을까 ? 

 

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

아래 예시 ↓↓

global 키워드 사용 예 

코드 풀이 : gloabl a ----> a 라는  전역 변수를 가져오겠다. 사용하겠다 ! 라는 의미로 볼 수 있다. 그리고 5번째 줄에  a = 2  / a 변수에 2라는 값을 넣을 때, 이 때의 a는 전역 변수를 가리키게 된다. 즉, 전역 변수 a의 값을 변경시킨다. 

6번째 줄 print(a) ---> 2 

9번째 줄 print(a) ----> 2    둘 다 모두 전역 변수를 가리키기 때문에 변경된 전역 변수의 값 2를 출력한다. 

 

 

 

주의점 

-아래와 같이 global a = 2 이렇게 바로 쓸 수 없고 반드시 " global a " 선언을 하고 그 다음에 변수의 값을 넣어줄 수 있다.  

 

 

전역 변수가 없는데 global로 전역 변수를 만드는 경우 

 

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

코드 풀이 : 함수 Fn() 에서 global 키워드를 사용하여 a를 전역 변수로 선언했다. 그리고 a 에 10이라는 값을 담고 print(a) ==10 

8번째 줄에서 print(a) 는 a == 전역 변수를 가리키는데 함수 밖에 전역 변수는 없지만 함수 안에서 global을 사용해서 a를 선언했기 때문에 전역변수가 되어 10이 출력 된다. 

 

 

함수 안에서 global을 사용하지않고 한 경우 (-> 지역 변수)

전역 변수 a는 존재하지 않기 때문에 오류가 난다. 

 

 

 

 


 

 

 

 

nonlocal 지역 변수 (지역 변수를 불러올 때) 

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

코드 풀이 : Fn 함수 안에 Fn2 또 다른 함수 실행

Fn2에서 Fn 함수 안의 지역 변수 a를 가져올 때 nonlocal 키워드를 사용, a 변수를 선언해준다. 

만약 nonlocal 키워드를 사용하지않으면 아래 코드처럼 Fn2 함수 안에서만의 a 변수가 되어 Fn() 첫 번째 함수에는 영향을 미치지 않게 된다. 

 

 

 

 

반응형

댓글