python
파이썬에서 이름, 네임스페이스, 변수 스코프가 어떻게 작동하는지 명확한 예제와 모범 사례로 탐구합니다.
"The Zen of Python"(import this)의 마지막 줄은 "네임스페이스는 정말 훌륭한 아이디어다 -- 더 많이 하자!"라고 합니다. 그렇다면 네임스페이스는 무엇일까요? 먼저 이름을 정의해 봅시다.
이름(identifier)은 객체를 참조하는 레이블입니다. 파이썬에서 모든 것은 객체이며, 이름은 객체에 편리하게 접근하는 방법을 제공합니다.
예를 들어 a = 2를 실행하면 정수 2가 메모리에 저장되고 a가 그 참조가 됩니다. 내장 id() 함수는 객체의 메모리 주소를 반환합니다.
# 참고: id 값은 환경마다 다를 수 있습니다
a = 2
print('id(2) =', id(2))
print('id(a) =', id(a))
출력
id(2) = 9302208 id(a) = 9302208
두 이름이 같은 객체를 가리키므로 id() 값이 일치합니다. a를 재바인딩하면 어떻게 될까요?
# 참고: id 값은 환경마다 다를 수 있습니다
a = 2
print('id(a) =', id(a))
a = a + 1
print('id(a) =', id(a))
print('id(3) =', id(3))
b = 2
print('id(b) =', id(b))
print('id(2) =', id(2))
출력
id(a) = 9302208 id(a) = 9302240 id(3) = 9302240 id(b) = 9302208 id(2) = 9302208
a = a + 1 실행 시 새 객체 3이 생성되고 a가 이를 참조합니다. id(a)와 id(3)이 동일한 것을 확인하세요. 이후 b = 2는 기존 2 객체에 b를 바인딩해 중복 저장을 피합니다.

이 동적 이름 바인딩이 파이썬을 유연하게 만듭니다: 단일 식별자가 함수까지 포함해 어떤 타입의 값도 가리킬 수 있습니다.
def printHello():
print("Hello")
a = printHello
a()
출력
Hello
식별자 a가 이제 함수 printHello를 참조하므로 직접 호출할 수 있습니다.
네임스페이스는 이름에서 객체로의 매핑입니다. 정의한 모든 식별자와 연관된 객체를 담는 딕셔너리라고 생각하면 됩니다.
파이썬은 여러 네임스페이스를 동시에 지원하며, 각각 서로 격리되어 있습니다. 인터프리터는 세션 생명주기 동안 지속되는 모든 내장 이름을 담은 전역 네임스페이스를 생성합니다. 모든 모듈은 자체 전역 네임스페이스를 가지며, 각 함수나 클래스 정의는 새로운 지역 네임스페이스를 도입합니다.

네임스페이스가 존재하는 동안, 스코프는 이름이 자격 없이 접근 가능한 위치를 결정합니다.
어떤 순간에도 프로그램은 최소 세 개의 중첩 스코프를 가집니다:
함수 내부에서 이름을 참조하면 파이썬은 지역 네임스페이스 → 전역 → 내장 순으로 검색합니다. 함수 안에 또 다른 함수가 있으면 내부 함수가 새로운 중첩 스코프를 도입합니다.
다음 코드를 고려해 보세요:
def outer_function():
b = 20
def inner_func():
c = 30
a = 10
여기서 a는 모듈의 전역 네임스페이스에 있습니다. b는 outer_function의 지역 변수, c는 inner_func의 중첩 지역 네임스페이스에 속합니다.
inner_func 내부에서 c는 지역, b는 non-local, a는 전역입니다. c는 읽고 쓸 수 있지만 b와 a는 global이나 nonlocal로 명시 선언하지 않으면 읽기만 가능합니다.
더 구체적인 예시:
def outer_function():
a = 20
def inner_function():
a = 30
print('a =', a)
inner_function()
print('a =', a)
a = 10
outer_function()
print('a =', a)
출력은 세 개의 서로 다른 a 바인딩을 보여줍니다:
a = 30 a = 20 a = 10
모든 대입을 전역 a로 강제하려면 global 키워드 사용:
def outer_function():
global a
a = 20
def inner_function():
global a
a = 30
print('a =', a)
inner_function()
print('a =', a)
a = 10
outer_function()
print('a =', a)
이제 출력은 단일 전역 a를 반영합니다:
a = 30 a = 30 a = 30
이 예제들은 파이썬의 네임스페이스와 스코프 규칙이 변수 가시성과 변경을 어떻게 제어하는지 보여줍니다.
python
파이썬 2란 무엇인가? 파이썬 2는 파이썬 개선 제안(PEP)에 명시된 기술적 세부사항을 해결하며 개발을 간소화했습니다. 최종 릴리스인 파이썬 2.7은 2020년에 수명 종료(EOL)를 맞이했으며, 파이썬 소프트웨어 재단에서 더 이상 지원하지 않습니다. 여전히 레거시 시스템에서 사용되지만 미래는 불확실합니다. 기존 코드베이스에 대한 레거시 지원 Puppet, Ansible 등 구형 라이브러리 및 도구와의 호환성 아직 파이썬 3로 마이그레이션할 수 없는 조직 파이썬 3란 무엇인가? 2008년 12월 출시된 파이썬 3는
부품 및 소모품 부품 수량 아두이노 나노 R3 1 SG90 마이크로 서보 모터 3 초음파 센서 HC-SR04 1 PCBWay 커스텀 PCB 1 앱 및 온라인 서비스 아두이노 IDE 프로젝트 소개 소개 우리 모두 아이언맨 영화와 마블 시리즈의 자비스(JARVIS) AI 어시스턴트 로봇에 익숙합니다. 프로그래머라면 누구나 자신만의 것을 만들고 싶어 했죠. 오늘 파이썬 프로그래밍으로 그런 어시스턴트를 만드는 간단한 방법을 보여드리겠습니다. 게다가 로봇의 물리적 아바타도 만들어, 우리가 로봇에게 말할