✍ 공부/Python

[ TIL ] 파이썬 전역변수와 지역변수

Po_tta_tt0 2022. 4. 13. 13:33
반응형

 

✍ 전역변수와 지역변수

 

0.

메인스크립트에 선언되면 전역변수


def DFS1(): # ✨ def 1
    print(cnt)
    
def DFS2(): # ✨ def 2
    if cnt == 5:
        print(cnt)
        
        
if __name__ == '__main__':
    cnt=5 # ✨ 1
    DFS1() # ✨ def 1
    DFS2() # ✨ def 2
    print(cnt)

1 : 전역변수

이 한 줄에 담긴 의미 : cnt라는 변수가 생성되고 5라는 값이 할당됨. 변수의 생성과 값 할당까지 다 가지고 있다.

기본적으로 전역변수는 모든 함수가 접근할 수 있고 값도 변경할 수 있는 공용의 값이다.

 

이 전역변수가 읽힌 다음 전역변수 안에 있는 함수 DFS1()과 DFS2()를 읽어내려가게 되는데

 

 

 

def 1 : 함수

1. cnt라는 변수가 자신의 지역변수인지 먼저 확인해본다.

=> 자신의 공간에 cnt가 있는지 확인해본다.

2-1.지역변수이면 자신의 지역변수로 인식하고 작동한다

2-2. 그러나 자신의 지역변수 공간에 cnt가 존재하지 않는다면 전역변수인지를 확인한다.

만약 전역변수도 아니라면 에러가 발생. not defined!

 

def 2 : 함수

이 또한 지역변수인지 확인해보고 아니면 전역변수를 확인한 다음에 print(cnt)를 출력한다

 

 

 

1.

def DFS1(): # ✨ def 1
    cnt = 3
    print(cnt)

*

만약 def 안에 cnt = 3 등의 값을 넣어주면

함수 안에 지역변수가 생긴 것.

따라서 전역변수 cnt = 5를 출력하는 것이 아니라

cnt = 3이 우선하여 print()로 3을 출력하게 된다

=> 같은 변수명을 가지고 있는 전역변수와 지역변수가 있다면 지역변수가 우선한다.

 

 

 

2.

def DFS2(): # ✨ def 2
    if cnt == 5:
        cnt = cnt+1
        print(cnt)

*

만약 def2 안 if 밑에 cnt = cnt+1이 들어가게 된다면?

cnt = 이 들어갔기 때문에 새로운 지역변수가 생겼다고 볼 수 있다

이 cnt라는 새로운 지역변수 안에 cnt + 1 을 만들었다고 볼 수 있다.

=> cnt는 def2의 지역변수가 된다

 

그러나

if cnt == 5에서 cnt를 찾지 못하기 때문에(지역변수는 존재하지만 선언되기 전에 불러왔기 때문에) 오류가 발생한다.

local variable 'cnt' referenced before assignment

 

 

이 때 cnt를 전역변수로 사용하기 위해서는

global 이 필요하다

def DFS2():
    global cnt 
    if cnt == 5:
        cnt = cnt+1
        print(cnt)

언어번역이 되기 전에 전역변수라고 알려주는 것

global 후에는 cnt가 지역변수라고 판별되는 것이 아닌

전역변수인 cnt의 값에서 1을 더한 값으로 전역변수 cnt를 변화시킨다.

=> global '전역변수명' 을 사용하게 되면 지역변수와 헷갈리지 않고 변수를 전역변수로 판별한다

 

 

 

 

반응형