파이썬 스크립트에서 변수를 만들면 다음과 같이 함수 안에서도 사용할 수 있다.
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를 만든것 이다.