이제 my_func를 호출하면 count 값이 변경된 것을 알 수 있으며, 함수 밖의 프로그램 코드에서도 접근이 가능한 것을 알 수 있다. 만약 my_func가 지역 변수 count를 사용했다면 함수 밖에서 접근할 수 없었을 것이다.
global 문은 직접 무언가를 만들지 않는다. 변수는 값을 대입할 때 생성된다. 앞서 살펴본 예제에서는 변수 count가 함수 정의문보다 먼저 생성되었다.
우리는 함수와 클래스 정의문 밖에 위치한 모든 문장으로 구성된 모듈 - 수준 코드에서 전역 변수를 만들 수 있다. 하지만 다음과 같이 global 문을 함수 안에서 사용하면 foo 변수가 존재하지 않을 때 foo를 호출하는 시점에 전역 변수가 생성된다.
def my_func():
global foo
foo = 5 # 전역 변수 foo가
# 존재하지 않으면 생성한다.
print(foo)
foo가 아직 존재하지 않다고 가정해 보면 이 함수는 foo를 생성하여 5로 세팅한다. global foo로 인해 foo는 지역 변수가 아니라 전역 변수로 생성된다. 이 코드는 foo가 모듈 - 수준 코드가 아니더라도 동작한다.
일반적으로 파이썬의 전역 변수와 지역 변수에 관한 황금 규칙이 있다. 간단하게 설명하자면 다음과 같다.
*
함수에서 전역 변수에 값을 대입하는 경우가 있다면 global 문을 사용하여 지역 변수 사용을 피하자.