프로그래밍/Python

[Python] 지역변수와 전역변수

슬기나무 2021. 5. 31. 21:19
반응형

이번 포스팅에서는 파이썬에서의 지역변수와 전역변수에 대해 다뤄보겠습니다.

 

 지역변수와 전역변수

파이썬에서 모든 함수의 바깥에서 할당된 변수들은 전역 범위에 존재하여,

 

이 변수를 전역변수라고 합니다.

 

반면에 지역 범위에 존재하는 변수는 지역변수라고 합니다.

 

변수는 전역/지역변수로 구분되며, 지역이면서 전역변수일 수는 없습니다.

 

 지역변수 사용 예시

아래와 같은 함수가 있습니다.

def apple():
    banana = 100
apple()
print(banana)

위 함수를 실행하면 아래와 같은 에러가 발생하게 됩니다.

banana라는 변수는 apple() 함수 내에 지역변수로 선언되었으므로,

 

전역 범위에 속하지 않아 에러가 발생하는 것입니다.

 

또한 특정 지역 범위 내에선 다른 지역 범위의 변수를 사용할 수 없습니다.

 

아래의 예를 살펴보시죠.

def apple():
    banana = 100
    cherry()
    print(banana)

def cherry():
    orange = 101
    banana = 10

apple()

apple() 함수가 실행되면 그 지역 범위의 banana 변수가 100으로 설정됩니다.

 

그리고 cherry() 함수를 실행하면서 그 함수 내에 또 다른 지역 범위가 생성되어

 

orange 변수가 100으로 설정되고 banana 변수가 10으로 설정됩니다.

 

그런데 다음 줄로 넘어가게 되면 cherry()함수는 종료되고,

 

apple() 함수의 지역 범위로 넘어와 banana 변수를 print하게 되므로

 

최종 결과는 아래와 같이 100이 출력됩니다.

위의 예에서 살펴보았다시피,

 

같은 변수 이름이라도 지역 범위가 다르면 의도한 결과와 다른 결과를 얻게 될 수 있으므로

 

전역 변수 혹은 다른 지역 변수와 같은 이름을 가진 지역 변수는 피하는 것이 좋습니다.

 

 global문

함수 안에서 변수는 일반적으로 지역 범위를 갖습니다.

 

하지만 함수 안에서도 전역 변수를 수정할 수 있습니다.

 

global문을 사용하면 되는데요.

 

global banana 와 같은 코드가 있다면

 

이 함수에서 banana는 전역 변수를 참조하는 것이라는 뜻입니다.

 

예시를 통해 알아보겠습니다.

def apple():
    global banana
    banana = 100

def cherry():
    banana = 101

def orange():
    print(banana)

banana = 50
apple()
print(banana)

위 코드를 실행하게 되면 출력되는 결과는 아래와 같습니다.

apple() 함수에서 banana는 전역 변수입니다.

 

또한 orange() 함수에서도 banana는 전역 변수입니다.

 

반면 cherry() 함수에서는 지역 변수입니다.

 

결과적으로 전역 범위에서 banana를 50으로 지정하더라도

 

바로 아래에 apple() 함수가 실행됨으로써 banana가 전역 변수로 100으로 설정되어

 

출력되는 값은 100이 되는 것입니다.

반응형