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

Written on August 11, 2019

함수 내에서 정의되어 함수가 실행되는 동안 존재, 호출되는 변수를 지역변수(Local Variable)라고 하며, 이는 그 변수가 속한 함수 외부에서는 참조할 수 없다. 반면, 전역에 정의되어 함수 내외부에서 참조할 수 있는 변수를 전역변수(Global Variable)라고 한다. 하지만, 전역변수는 함수 안에서 읽기는 가능하지만, 수정은 불가하다.

특징 전역변수 지역변수
함수 안에서 읽기 가능 가능
함수 안에서 수정 불가 가능
함수 밖에서 읽기 가능 불가
함수 밖에서 수정 가능 가능

전역변수와 지역변수

count = 1
def count_add_by(num):
    added_count = count + num
    return added_count

print(count_add_by(5))
print(count)
print(added_count)


위의 코드 실행의 결과값은 아래와 같다. 전역에 선언된 count는 함수내에서 읽기가 가능하기 때문에 count_add_by(5) 함수의 실행결과는 6이며, 함수가 실행되었지만 전역변수 count가 수정되지는 않았으므로, count는 여전히 1 이다. 반면, added_count는 함수 내에서 선언된 지역변수로, 함수 내부에서만 유효하다. 따라서 함수 외부에서 호출한 결과 undefined 에러가 발생한다.

6
1
Error: Undefined variable 'added_count'

global 문을 사용하여 함수 내에서 전역변수 수정하기

함수 내에서 전역변수를 수정할 수 없지만, 필요 시 global 문을 사용하면 함수 내에서도 전역변수 수정이 가능하다. 아래 코드와 같이 함수 내에서 global 변수이름을 선언하면 된다.

count = 1  # 전역변수
def count_add_by(num):
    global count
    count = count + num
    return count

print(count_add_by(5))
print(count)


함수 내에서 전역변수 count를 수정하였으므로, 함수 실행 후 count는 6이 된다.

6
6


하지만, global 문은 꼭 필요한 경우가 아니면 사용하지 않는 것이 좋다.

global 문을 사용하지 않고 전역변수 수정하기

global 문을 사용하지 않더라도 함수의 매개변수와 반환값을 이용하여 전역변수를 수정할 수 있다.

count = 1  # 전역변수
def count_add_by(count, num):
    print(count)
    count = count + num
    return count

count = count_add_by(count, 5)
print(count)


전역변수의 count를 함수의 매개변수로 전달하고, 반환값을 전역변수 count에 대입해주면 간접적으로 전역변수를 수정할 수 있다.

1
6

👩🏻‍💻 배우는 것을 즐기는 프론트엔드 개발자 입니다
부족한 블로그에 방문해 주셔서 감사합니다 🙇🏻‍♀️

in the process of becoming the best version of myself