본문 바로가기

파이썬/1. 파이썬 기초

파이썬 전역변수(global variable)와 지역변수(local variable)

전편에 이어서 함수에 관련한 이야기.

함수 안에서 변수를 선언하면 어떻게 될까?

밖이나 안이나 차이가 없다고 생각하면 안된다.

def age():
    my_age = 23
    print(my_age)

age()
# 23

내 나이를 출력하는 함수를 만들었다.

근데 굳이 함수 안에서 출력해야할까?

 

def age():
    my_age = 23

print(my_age)
# NameError: name 'my_age' is not defined

함수 내부에 my_age를 직접 출력하려 했으나. . .

my_age라는 변수는 없단다.

왜냐하면 함수 내부에서 선언된 지역변수는 함수가 종료됨과 동시에 사라지기 때문.

지역변수의 휘발성 때문에 다음과 같은 특징을 갖는다.

특징 전역변수 지역변수
함수 내부에서 읽기 O O
함수 내부에서 수정 X(g) O
함수 외부에서 읽기 O X(g)
함수 외부에서 수정 O X

그럼 이 규칙은 절대적이냐? 그건 아니다.

global 문을 사용하면 외부에서 지역변수의 사용, 내부에서의 전역변수 수정 등이 가능하다.(g로 표시된 부분)

# Case 1
def age():
    global my_age = 23  # 함수 내부에서 global my_age 선언

print(my_age)
# 23

# Case 2
my_age = 3
def age():
    global my_age = 23  # 전역변수를 수정

print(my_age)

이처럼 강력하지만 사용하지 않는 게 좋다.

global을 쓰지 않고도 대부분의 문제는 해결이 가능하며

쓰는 순간 가독성이 현저히 떨어진다.