파이썬 튜토리얼-네임 스케이프와 범위

Jinku Hu 2023년1월30일
  1. 파이썬의 이름
  2. 파이썬의 네임 스페이스
  3. 파이썬의 변수 범위
  4. 파이썬에서 범위와 네임 스페이스 사용하기
파이썬 튜토리얼-네임 스케이프와 범위

이 섹션에서는 Python 프로그래밍에서 변수의 네임 스페이스 및 범위를 학습합니다.

파이썬의 이름

파이썬에서 이름은 객체에 주어진 식별자입니다. 파이썬은 객체 지향 프로그래밍 언어로 모든 것이 파이썬의 객체이며 이름은 객체에 액세스하는 데 사용됩니다.

예를 들어, 변수 x = 3 에 값을 할당 할 때. 여기서 3 은 객체이며 메모리 위치 (RAM)에 저장된다. 이 메모리 위치는 x 라는 이름으로 액세스 할 수있는 명명 된 메모리 위치입니다. 이 객체 (3)의 주소는 내장 함수 id()를 사용하여 얻을 수 있습니다.

x = 3
print("id(3) =", id(3))
print("id(x) =", id(x))
id(3) = 1864160336
id(x) = 1864160336

이제 객체 3은 이름이 x인 위치에 저장되므로 두 주소가 동일합니다.

다른 변수에 x 의 값을 할당하고 y라고 말하고 x의 값을 변경하면 x는 새로운 위치를 가지며 y는 이전 x 의 위치를 ​​갖게됩니다. 아래에 설명되어 있습니다.

x = 3
print("id(x) =", id(x))
x = 4
print("id(4) =", id(4))
print("id(x) =", id(x))
y = 3
print("id(y) =", id(y))
id(x) = 1864160336
id(4) = 1864160352
id(x) = 1864160352
id(y) = 1864160336

여기에서 y 의 주소는 오래된 x 의 주소와 같습니다.

파이썬의 네임 스페이스

네임 스페이스는 이름의 모음입니다. 네임 스페이스는 이름을 객체에 매핑하는 것으로 Python 에서 사전으로 구현됩니다. 네임 스페이스는 프로그램에 사용 된 모든 이름이 고유한지 확인합니다.

네임 스페이스는 인터프리터가 시작될 때 작성되고 프로그램 실행이 종료되면 삭제됩니다. 이 네임 스페이스에는 모든 내장 이름이 포함되어 있으므로 id()와 같은 내장 함수가 필요할 때마다 프로그램에서 직접 사용할 수 있습니다.

함수를 호출하면 정의 된 모든 이름이 포함 된 로컬 네임 스페이스가 생성됩니다.

파이썬의 변수 범위

프로그램에서 변수를 작성할 때 프로그램의 모든 부분에서 해당 변수에 액세스하지 못할 수 있습니다. 변수의 범위 때문입니다. 변수가 정의되지 않은 네임 스페이스에서 변수에 액세스하려고합니다.

범위는 접두사없이 네임 스페이스에 액세스 할 수있는 장소로 정의 할 수 있습니다.

범위는 다음과 같이 분류 할 수 있습니다.

  1. 지역 이름이있는 기능의 범위.
  2. 전역 변수가있는 모듈의 범위.
  3. 기본 제공 이름이있는 외부 범위.

함수 내에 참조를 만들면 먼저 로컬 네임 스페이스에서 검색된 다음 전역 네임 스페이스에서 검색됩니다. 어디서나 찾을 수 없으면 내장 네임 스페이스에서 검색됩니다.

중첩 함수를 만들 때 로컬 범위 안에 새로운 범위가 생깁니다.

파이썬에서 범위와 네임 스페이스 사용하기

def outer():
    x = 12

    def inner():
        y = 13


z = 14

여기에서 중첩 함수가 정의됩니다 (다른 함수 내부의 함수). 변수 y 는 내부 함수의 중첩 된 로컬 네임 스페이스에 있고 변수 x 는 외부 함수의 로컬 네임 스페이스에 있고 변수 z 는 전역 네임 스페이스에 있습니다.

내부 함수 안에있을 때, 변수 y 는 지역 변수이고,x 는 지역 변수가 아니며 z 는 전역 변수입니다. 내부 함수는 로컬이 아닌 x 와 전역 z 변수에 액세스 할 수 없습니다.

작가: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.

LinkedIn Facebook