python
이 자습서에서는 이름 공간, 이름에서 개체로의 매핑, 변수 범위에 대해 배웁니다.
'Zen of Python'(import this
입력)을 읽은 적이 있다면 Python 인터프리터에서), 마지막 줄은 네임스페이스는 경적을 울리는 훌륭한 아이디어 중 하나입니다. 더 많이 해봅시다! 그렇다면 이 신비한 네임스페이스는 무엇일까요? 먼저 이름이 무엇인지 살펴보겠습니다.
이름(식별자라고도 함)은 단순히 객체에 부여된 이름입니다. 파이썬의 모든 것은 객체입니다. 이름은 기본 개체에 액세스하는 방법입니다.
예를 들어 a = 2
할당을 수행할 때 , 2
메모리에 저장된 객체이고 a 우리가 연결하는 이름입니다. 내장 함수 id()
를 통해 일부 객체의 주소(RAM)를 얻을 수 있습니다. . 사용 방법을 살펴보겠습니다.
# Note: You may get different values for the id
a = 2
print('id(2) =', id(2))
print('id(a) =', id(a))
출력
id(2) = 9302208 id(a) = 9302208
여기에서 둘 다 동일한 개체 2
를 참조합니다. , 따라서 동일한 id()
. 좀 더 흥미롭게 만들어 봅시다.
# Note: You may get different values for the 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
위의 일련의 단계에서 무슨 일이 일어나고 있습니까? 다이어그램을 사용하여 이를 설명하겠습니다.
<그림>
처음에 개체 2
생성되고 이름 a a = a+1
을 수행할 때 연결됩니다. , 새 개체 3
생성되었으며 이제 a 이 개체와 연결되어 있습니다.
id(a)
및 id(3)
동일한 값을 갖습니다.
또한 b = 2
일 때 실행되면 새 이름 b 이전 개체 2
와 연결됩니다. .
이것은 파이썬이 새로운 복제 객체를 생성할 필요가 없기 때문에 효율적입니다. 이름 바인딩의 이러한 동적 특성은 Python을 강력하게 만듭니다. 이름은 모든 유형의 개체를 참조할 수 있습니다.
>>> a = 5
>>> a = 'Hello World!'
>>> a = [1,2,3]
모두 유효하며 a 다른 인스턴스에서 세 가지 다른 유형의 객체를 참조합니다. 함수도 객체이므로 이름에서도 참조할 수 있습니다.
def printHello():
print("Hello")
a = printHello
a()
출력
Hello
같은 이름 a 함수를 참조할 수 있으며 이 이름을 사용하여 함수를 호출할 수 있습니다.
<시간>이제 이름이 무엇인지 이해했으므로 네임스페이스 개념으로 넘어갈 수 있습니다.
간단히 말해서 네임스페이스는 이름의 모음입니다.
Python에서는 네임스페이스를 정의한 모든 이름을 해당 개체에 매핑하는 것으로 상상할 수 있습니다.
서로 다른 네임스페이스는 주어진 시간에 공존할 수 있지만 완전히 분리되어 있습니다.
모든 내장 이름을 포함하는 네임스페이스는 파이썬 인터프리터를 시작할 때 생성되며 인터프리터가 실행되는 한 존재합니다.
이것이 id()
과 같은 내장 함수가 , print()
등은 프로그램의 어느 부분에서나 항상 사용할 수 있습니다. 각 모듈은 자체 전역 네임스페이스를 생성합니다.
이러한 서로 다른 네임스페이스는 격리됩니다. 따라서 다른 모듈에 존재할 수 있는 동일한 이름이 충돌하지 않습니다.
모듈은 다양한 기능과 클래스를 가질 수 있습니다. 모든 이름이 정의된 함수가 호출될 때 로컬 네임스페이스가 생성됩니다. 클래스의 경우도 마찬가지입니다. 다음 다이어그램은 이 개념을 명확히 하는 데 도움이 될 수 있습니다.
<그림> <시간>다양한 고유한 네임스페이스가 정의되어 있지만 프로그램의 모든 부분에서 모든 네임스페이스에 액세스할 수는 없습니다. 범위의 개념이 작동합니다.
범위는 접두사 없이 네임스페이스에 직접 액세스할 수 있는 프로그램 부분입니다.
주어진 순간에 적어도 세 개의 중첩 범위가 있습니다.
함수 내에서 참조가 만들어지면 로컬 네임스페이스에서 이름을 검색한 다음 전역 네임스페이스에서, 마지막으로 내장 네임스페이스에서 이름을 검색합니다.
다른 함수 안에 함수가 있으면 새 범위가 로컬 범위 안에 중첩됩니다.
<시간>
def outer_function():
b = 20
def inner_func():
c = 30
a = 10
여기서 변수 a 전역 네임스페이스에 있습니다. 변수 b outer_function()
의 로컬 네임스페이스에 있습니다. 및 c inner_function()
의 중첩된 로컬 네임스페이스에 있습니다. .
inner_function()
에 있을 때 , c 우리 지역에 있습니다. b 로컬이 아니며 a 글로벌합니다. c에 새 값을 할당하고 읽을 수 있습니다. 그러나 b만 읽을 수 있습니다. 및 a inner_function()
에서 .
b에 값으로 할당하려고 하면 , 새 변수 b 로컬이 아닌 b와 다른 로컬 네임스페이스에 생성됩니다. . a에 값을 할당할 때도 마찬가지입니다. .
그러나 를 선언하면 전역으로 모든 참조 및 할당은 전역 a로 이동합니다. . 마찬가지로 b 변수를 다시 바인딩하려는 경우 , 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 = 30 a = 20 a = 10
이 프로그램에서 세 가지 다른 변수 a 별도의 네임스페이스에 정의되고 그에 따라 액세스됩니다. 다음 프로그램에 있는 동안
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 = 30 a = 30 a = 30
여기에서 모든 참조 및 할당은 전역 a global
키워드 사용으로 인해 .
python
파이썬 2란 무엇인가요? 파이썬 2 코드 개발 프로세스를 이전 버전보다 쉽게 만들었습니다. Python Enhancement Proposal(PEP)의 기술적 세부 사항을 구현했습니다. Python 2.7(2.x의 마지막 버전)은 더 이상 개발되지 않으며 2020년에 중단됩니다. 이 튜토리얼에서는 다음을 배우게 됩니다. 파이썬 2란 무엇입니까? 파이썬 3이란 무엇입니까? Python 2를 배워야 하는 이유는 무엇입니까? Python 3를 사용해야 하는 이유는 무엇입니까? 파이썬 2의 역사 파이썬 3의 역사 Pyt
구성품 및 소모품 Arduino Nano R3 × 1 SG90 마이크로 서보 모터 × 1 초음파 센서 - HC-SR04(일반) × 1 PCBWay 맞춤형 PCB https://www.pcbway.com/project/shareproject/Multi_functional_Robot_PCB__Mofiza_.html × 1 앱 및 온라인 서비스 Arduino IDE 이 프로젝트 정보 소개: 우리 모두는