프로그래밍 언어/파이썬 기초

파이썬 지역변수와 전역변수

tteokbokki-master 2023. 6. 6. 22:40
def func(n):
    lv = n + 1
    print(lv)

func(12)

 

lv는 함수 안에 선언되는 변수이고 n이라는 매개변수 또한 함수 안에 선언되는 변수이다.
이러한 변수들을 지역변수라고 한다. 

지역변수는 함수 안에서만 존재한다. 누군가가 func라는 함수를 실행시키면
n이라는 지역변수와 lv라는 지역변수가 생성된다.


근데 함수 안의 마지막 print함수 호출이 끝나고 나면 함수를 벗어나게 되고 func(12) 위치로 돌아가게 된다.

이런 식으로 함수의 지역을 벗어나게 되면 지역변수는 소멸된다.
지역변수 임시적인 성격을 가진다. 즉 함수 밖에서 n과 lv에 접근이 어떠한 방법으로도 불가능하다. 

 

 

 

 

cnt = 100
cnt += 1
def func():
    print(cnt)

func()

 

cnt는 함수 밖에 선언되는 변수이고, 이러한 함수를 전역변수라고 한다.
전역변수가 선언된 이후로 언제든지 접근이 가능하다.  즉 전역 변수가 선언된 이후로는 함수 안에서도 접근이 가능하다.


한번 선언되고 나면 소멸되지 않고 계속 존재하는 변수를 전역변수라고 한다.

 

 

 

 

cnt = 100
def func():
    cnt = 0 
    print(cnt)

 

변수 cnt에 100을 저장했다.

그리고 func() 함수 내부에서 print를 통해 cnt값을 참조하는 것이 아니라, cnt = 0처럼 값을 저장하는 행위를 취하면
파이썬은 이것을 cnt라는 지역변수의 선언으로 판단한다. 즉 함수안에서만 접근 가능한 새로운 cnt값을 만들어버린다. 

100이 저장된 cnt(전역변수)와 func 함수 내부의 0이 저장된 cnt(지역변수)로 구분되어 cnt가 두 개가 되는 것이다

정리하면  func()를 실행하면 지역변수 cnt로 인해 0이 출력되지만
print(cnt)를 실행하면 전역변수 cnt로 인해 100이 출력된다. 

사실 전역변수가 있을 때 굳이 지역변수의 이름을 전역변수와 같게 해서 
안의 코드를 이해하기 어렵게 할 필요 없다. 새로운 변수가 필요하면 그냥 이름을 다르게 하는 게 깔끔하다. 

따라서 만약 안에서 지역변수를 선언하고 싶은데, 전역변수와 이름이 중복될 것 같으면 그냥 중복을 피하는 게 베스트이다.

 

 

 

 

cnt = 100
def func():
    global cnt
    cnt = 0
    print(cnt)

 

만약 함수 밖 변수의 값을 함수 내에서 바꾸고 싶을때는 global 함수를 쓰면 된다.


global cnt는 '지금부터 변수 cnt는 밖에 있는 cnt(전역변수)다' 라는 선언이다. 
그렇기에 위의 코드에서는 func()를 출력한 이후에 print(cnt)를 출력해도 0이 출력된다.