파이썬 튜토리얼-네임 스케이프와 범위
이 섹션에서는 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()
와 같은 내장 함수가 필요할 때마다 프로그램에서 직접 사용할 수 있습니다.
함수를 호출하면 정의 된 모든 이름이 포함 된 로컬 네임 스페이스가 생성됩니다.
파이썬의 변수 범위
프로그램에서 변수를 작성할 때 프로그램의 모든 부분에서 해당 변수에 액세스하지 못할 수 있습니다. 변수의 범위 때문입니다. 변수가 정의되지 않은 네임 스페이스에서 변수에 액세스하려고합니다.
범위는 접두사없이 네임 스페이스에 액세스 할 수있는 장소로 정의 할 수 있습니다.
범위는 다음과 같이 분류 할 수 있습니다.
- 지역 이름이있는 기능의 범위.
- 전역 변수가있는 모듈의 범위.
- 기본 제공 이름이있는 외부 범위.
함수 내에 참조를 만들면 먼저 로컬 네임 스페이스에서 검색된 다음 전역 네임 스페이스에서 검색됩니다. 어디서나 찾을 수 없으면 내장 네임 스페이스에서 검색됩니다.
중첩 함수를 만들 때 로컬 범위 안에 새로운 범위가 생깁니다.
파이썬에서 범위와 네임 스페이스 사용하기
def outer():
x = 12
def inner():
y = 13
z = 14
여기에서 중첩 함수가 정의됩니다 (다른 함수 내부의 함수). 변수 y
는 내부 함수의 중첩 된 로컬 네임 스페이스에 있고 변수 x
는 외부 함수의 로컬 네임 스페이스에 있고 변수 z
는 전역 네임 스페이스에 있습니다.
내부 함수 안에있을 때, 변수 y
는 지역 변수이고,x
는 지역 변수가 아니며 z
는 전역 변수입니다. 내부 함수는 로컬이 아닌 x
와 전역 z
변수에 액세스 할 수 없습니다.
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