Python에서 전역 변수를 사용하는 방법(전역 키워드)

Python에서 전역 변수가 작동하는 방식을 알아보세요. 변수 범위, 로컬 및 전역 네임스페이스, 그리고 global 키워드를 사용하여 변수를 수정하는 방법을 이해합니다.

Editor에서 이 솔루션을 사용해 보세요.

개요

Python에서 버그 없는 소프트웨어를 작성하려면 네임스페이스와 변수 범위 지정을 이해하는 것이 중요합니다. 범위는 프로그램의 어느 부분이 변수에 액세스하거나 수정할 수 있는지를 결정합니다. 모든 함수 외부에서 선언된 변수는 전역 범위에 존재하며 모듈 내 어디에서나 읽을 수 있습니다.

그러나 함수가 전역 변수를 수정(재할당)하려고 하면 문제가 발생합니다. 기본적으로 Python은 함수 내에서 할당을 볼 때 변수가 함수에 대해 로컬이라고 가정합니다. 전역 변수를 전역 변수로 선언하지 않고 수정하려고 하면 Python은 같은 이름의 지역 변수를 생성하고 전역 변수는 변경되지 않은 채로 둡니다(또는 `UnboundLocalError` 발생).

로컬 변수를 생성하는 대신 전역 네임스페이스의 변수를 수정하고 싶다고 Python에 명시적으로 알리려면 함수 내에서 `global` 키워드를 사용하여 변수를 선언해야 합니다. 전역 변수를 사용해야 하는 경우도 있지만 상태를 추적하고 디버그하기 어렵게 만들기 때문에 대규모 소프트웨어 설계에서는 일반적으로 나쁜 습관으로 간주됩니다.

코드 및 실행 출력

이 스크립트는 전역 변수 읽기, 변수 섀도잉 트랩, global 키워드를 사용한 전역 변수 수정을 보여줍니다.

counter = 10 # Global variable

def read_counter():
    # Reading a global variable works out-of-the-box
    print("Reading global counter:", counter)

def shadow_counter():
    # Attempting to assign without 'global' creates a local variable
    counter = 20 # Shadowing
    print("Inside shadow function:", counter)

def modify_counter():
    global counter # Declaring we are writing to global scope
    counter = 50
    print("Inside modify function:", counter)

read_counter()
shadow_counter()
print("Counter after shadow function:", counter) # Remains 10

modify_counter()
print("Counter after modify function:", counter) # Now 50
터미널 출력
Reading global counter: 10
Inside shadow function: 20
Counter after shadow function: 10
Inside modify function: 50
Counter after modify function: 50

단계별 구현

  • 함수 범위 외부에서 전역적으로 액세스해야 하는 변수를 선언합니다.
  • 특별한 선언을 추가하지 않고도 함수 내에서 전역 변수를 읽을 수 있습니다.
  • 전역 변수 값을 수정해야 하는 경우 함수 내에서 전역 키워드(예: 전역 카운터)를 사용하세요.
  • 범위 혼란과 네임스페이스 오염을 방지하기 위해 전역 변수 사용을 제한합니다.

자주 묻는 질문

Python의 변수 섀도잉이란 무엇입니까?

함수와 같이 로컬 범위 내에 선언된 변수가 외부 전역 범위에 있는 변수와 이름이 같을 때 섀도잉이 발생합니다. 지역 변수는 전역 변수를 마스킹하여 해당 범위 내에서 일시적으로 액세스할 수 없도록 만듭니다.

글로벌 키워드와 비로컬 키워드의 차이점은 무엇입니까?

global은 가장 바깥쪽 모듈 범위에 정의된 변수에 액세스하는 데 사용됩니다. nonlocal은 중첩된 함수 내에서 바깥쪽(외부) 함수 범위에 정의된 변수에 액세스하는 데 사용됩니다.

관련 주제

권장 Python 리소스

관련 대화형 튜토리얼, 치트 시트, 코드 비교를 통해 지식을 확장하세요.