변수의 사용 범위 알아보기

파이썬 스크립트에서 변수를 만들면 다음과 같이 함수 안에서도 사용할 수 있다.

x = 10
def foo():
    print(x)

foo()
print(x)
10
10

foo함수에서 함수 밖에 있는 변수 x의 값을 출력했다. 이처럼 함수를 포함하여 스크립트 전체에서 접근할 수 있는 변수를 전역변수(global variable)이라고 한다. 전역 변수에 접근할 수 있는 범위를 전역 범위(global scope)라고 한다.

위 코드에서 x를 foo내부에 정의하면 함수 밖의 print(x)에서 x를 접근할 수 없다. foo안에 정의된 x를 지역 변수(local variable)이라고 하며 지역 변수를 접근할 수 있는 범위를 지역 범위(local scope)라고 한다.

함수 안에서 전역 변수 변경하기

함수 안에서 전역변수를 변경하기 위해서는 global 키워드를 사용해야 한다.

x = 10
y = 10
def foo():
    x = 20
    global y
    y = 20

foo()
print(x)
print(y)
10
20

앞서 정의된 전역변수가 없다면 global 키워드를 작성한 동시에 전역변수가 생성된다.

네임스페이스

파이썬에서 변수는 네임스페이스(namespace, 이름공간)에 저장된다. 다음과 같이 locals() 함수를 사용하면 네임스페이스를 딕셔너리 형태로 출력할 수 있다.

함수 안에서 함수 만들기

지역 변수의 범위

hello를 접근할 수 있는 범위는 다음과 같다.

def print_hello():
    hello = "Hello, world!"
    def print_message():
        print(hello)
    print_message()

print_hello()

지역 변수 변경하기

def A():
    x = 10
    def B():
        x = 20 # 새로운 변수 x를 만듦

    B()
    print(x)

A()
10

위 코드에서 B 함수에 의해 x값이 20으로 변경되어야 할 것 같지만 실제로는 B함수 내부에서 새로운 변수 x를 만든것 이다.