본문 바로가기

python 기초강의

파이썬 지역변수와 전역변수 문법 #16

파이썬 지역변수와 전역변수 문법 #16

파이썬 지역변수와 전역변수 문법 #16

 

안녕하세요.

 

파이썬에 대해서 한걸음 또 알아가는 포스트를 작성 하겠습니다.

벌써 16번째 시간입니다.

 

얼마나 많은 분들이 보고 계시는지는 모르겠지만, 저 혼자라도 공부한다는 기분으로 조금씩 조금씩 파이썬을 알아가고 있습니다.

그래도 함께 공부하시는분이 한분이라도 계신다면 힘이 될 것 같습니다.

 

자, 그럼 오늘은 지역변수와 전역변수에 대해서 알아 보도록 하겠습니다!

Let's Go!!!!

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

자, 여러분들은 이미 변수라는게 뭔지 아실겁니다.

변수란 어떤 값을 가지고 있는 하나의 객체를 말합니다.

sum = 10
apple = '사과'

print(sum)
print(apple)

위와 같은 파이썬 코드를 작성해서 실행하면 아래와 같은 결과가 나오는것을 확인 할 수 있습니다.

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

위 코드에서 sum, apple는 각각 10과 사과 라는 값을 가진 변수가 되는것 이죠.

 

이젠 변수는 알겠는데, 지역변수와 전역변수는 무엇일까요?

지역변수란, 어떤 함수 안에서 생성되는 변수로 해당 함수나 클래스를 벗어나면 메모리에서 지워지므로 외부에서 참조 할 수 없는 변수를 말합니다.

그리고 전역변수는 함수 밖의 전역에서 선언이 되고, 다른 함수에서 호출하여 사용할 수 있는 변수를 이야기 합니다.

 

말로는 잘 이해가 가지 않을 수 있습니다.

실습을 통해서 알아 보겠습니다.

 

 

 

파이썬 지역변수와 전역변수 문법 사용법

자, 아래와 같은 파이썬 코드가 있습니다.

# 지역변수와 전역변수

life = 3

def game(death): 
    life = life - death
    print("남은 생명은 {0}개 입니다!".format(life))

print("남은 생명 : {0}".format(life))
game(1)  #한번 죽음

print("남은 생명 : {0}".format(life))

우선 코드를 보겠습니다.

life 라는 변수에 3을 설정 합니다.

 

그리고 game 이라는 함수를 정의 합니다. 그 안에서 life(생명)이 3개 있는데, 한번 죽을때마다 하나씩 빼주는 수식을 넣어 줍니다. 그리고 남은 생명이 몇개인지를 출력 해줍니다.

 

위 코드를 그럼 실행 해보겠습니다.

그럼 아래와 같이 에러가 발생 합니다.

파이썬 지역변수와 전역변수 문법 사용법1

에러코드를 읽어보니 <UnboundLocalError: local variable 'life' referenced before assignment> 즉, game 이라는 함수안에서 호출한 life 라는 변수가 뭔지 모르겠다 라는 뜻이네요.

 

즉, def game 이라고 선언하기전에 life 변수에 3을 저장 했지만, 함수 안에서는 그걸 못불러 오는것이죠.

 

 

 

그래서, 아래와 같이 코드를 수정 합니다.

life = 3

def game(death): 
    life = 5 # 내부에서 선언 한 변수
    life = life - death
    print("남은 생명은 {0}개 입니다!".format(life))

print("남은 생명 : {0}".format(life))
game(1)  #한번 죽음

print("남은 생명 : {0}".format(life))

이번엔 다 같은데 game 함수를 선언하고, 바로 아래 life = 5라고 선언을 했죠.

위 코드를 그럼 한번 실행 해보겠습니다.

파이썬 지역변수와 전역변수 문법 사용법2

그랬더니 이번엔 에러가 나지 않고 위와 같이 출력이 되었네요.

출력된 값을 잘 보겠습니다.

 

남은 생명 : 3   -- 이건 코드의 첫줄에서 선언된 life에 대한 값이 출력 된 것 입니다.
남은 생명은 4개 입니다!  -- 이건 game이라는 함수 안에 있는 print 문에서 출력이 된것이죠. 즉, life가 5였는데 1을 빼고 4가 출력이 된 것 입니다.
남은 생명 : 3 -- 이것 역시 game 함수 밖에 있는 life의 변수값 입니다. 변화가 없던것 이죠.

 

이렇게 game 이라는 함수 밖에 있는 life와 함수 안에 있는 life 변수가 서로 다르다게 인식 하고 있다는 것을 알 수 있습니다.

 

이것이 바로 지역변수라는 것 입니다. 어떤 지역, 즉 함수 안에서만 사용이 되는 것 이죠.

 

이번에는 그럼 game 함수 밖에 있는 life 라는 변수를 이용해서 game 함수 안에서 사용 하는 방법, 즉, 전역변수를 이용 해보겠습니다.

아래와 같이 코드를 작성 합니다.

# 지역변수와 전역변수

life = 3

def game(death): 
    global life # 외부에서 선언 한 변수를 전역 변수로 씀
    life = life - death
    print("남은 생명은 {0}개 입니다!".format(life))

print("남은 생명 : {0}".format(life))
game(1)  #한번 죽음

print("남은 생명 : {0}".format(life))

def game 이라고 game 함수를 정의하고 life 앞에 global 이라는 키워드를 입력했습니다.

이것이 바로 지역변수를 전역변수로 바꿔주는 마법의 키워드 입니다.

 

이렇게 하고나서 결과가 어떻게 출력 되는지를 보겠습니다.

파이썬 지역변수와 전역변수 문법 사용법3

자, 결과를 보니 이젠 이해가 되시죠?

밖에서 선언한 life = 3 이라는 값이 처음 출력이 되고, game 함수를 호출해서 1을 빼고나니, 이젠 2가 남은것을 출력되는 값을 통해서 확인 할 수 있습니다.

 

 

 

음, 하지만 이렇게 전역변수를 쓰다보면 코드나 프로그램이 복잡해 질때 아주 헷갈릴수가 있습니다.

그래서 함수에서 return을 주는 형식으로 전역변수를 대체 할 수 있습니다.

아래 코드를 보시겠습니다.

# 지역변수와 전역변수

life = 3

def game(life, death): 

    life = life - death
    print("남은 생명은 {0}개 입니다!".format(life))
    return life

print("남은 생명 : {0}".format(life))
life = game(life, 1)  #한번 죽음

print("남은 생명 : {0}".format(life))

위에서 계속 써왔던 것과 같은 결과를 출력하는 코드이지만 전역변수를 쓰지 않았습니다.

단, game이라는 함수에 life 변수값을 입력 파라미터로 주고, 함수 안에서 life를 return 해주는 방식 입니다.

결과를 보실까요?

파이썬 지역변수와 전역변수 문법 사용법4

위에서 전역변수를 예로 든것과 같죠.

이렇게 return을 이용해서 전역변수를 대체 할 수 있다는것도 알아 두시면 좋으실 겁니다.

 

이렇게 오늘은 지역변수와 전역변수에 대해서 함께 공부를 해봤습니다. 

간단하죠?

 

그럼 다음 시간에 또 뵙도록 하겠습니다.

감사합니다!!!

 

 

##지난 파이썬 스터디##

2020/10/20 - [python 기초강의] - 파이썬 가변인자 함수 문법 #15

 

파이썬 가변인자 함수 문법 #15

파이썬 가변인자 함수 문법 #15 안녕하세요. 이번 포스팅은 파이썬의 가변인자 함수에 대한 내용 입니다. 가변인자 함수는 파이썬 함수를 생성할때 유용하게 쓰이는 문법 입니다. 잘 알아두시면

stricky.tistory.com

2020/10/20 - [python 기초강의] - 파이썬 함수 기본값 문법 #14

 

파이썬 함수 기본값 문법 #14

파이썬 함수 기본값 문법 #14 안녕하세요. 지난 파이썬 기본문법 13강에 이어서 함수내에서 기본값을 사용 하는 문법을 함께 공부 하도록 하겠습니다. 2020/10/16 - [python 기초강의] - 파이

stricky.tistory.com

2020/10/16 - [python 기초강의] - 파이썬 함수 생성 방법 기본 문법 독학 #13

 

파이썬 함수 생성 방법 기본 문법 독학 #13

파이썬 함수 생성 방법 기본 문법 독학 #13 안녕하세요. 오늘은 파이썬의 함수를 생성하고 사용하는 방법에 대한 기본 문법을 함께 공부해 보도록 하겠습니다. 함수란 무었일까요?? 그럼 혹시 매

stricky.tistory.com

 

by.sTricky