2.42. 마무리

OpenMV Cam용 스크립트를 작성할 때 끊임없이 등장하는 Python의 여러 부분을 살펴보았습니다:

  • 언어 기초 – 값과 변수, 산술과 비교, 문자열과 바이트, 네 가지 핵심 컬렉션(list, tuple, dict, set), 조건문과 루프, 함수 정의 및 인자와 스코프 관리, 클래스 정의와 상속 사용, 예외 발생과 처리. 이것들은 Python의 다른 모든 부분을 쌓아 올리는 벽돌입니다.

  • 구조적 요소 – 코드를 모듈과 패키지로 나누기, 필요한 것 임포트하기, with로 파일 읽고 쓰기, json을 통한 구조화된 데이터 교환, 그리고 엔디언과 고정 폭 정수 필드를 사용한 struct를 통한 이진 레코드 패킹. 이것들은 스크립트가 단일 파일을 넘어 커지거나 외부의 무언가와 통신해야 하는 순간 나타납니다.

  • 제약된 런타임에서 모습이 달라지는 부분 – MicroPython의 float가 32비트인 이유와 이를 안정적으로 비교하는 방법, 가비지 컬렉터가 블록을 나눠주고 회수하는 방식, 작은 힙에서 단편화가 중요한 이유, 그리고 사전 할당이 장시간 실행되는 스크립트를 잘 동작하게 유지하는 방법. 여기서는 데스크톱 습관이 때때로 오도할 수 있습니다. 이 자료는 장치 위에서 살아가는 코드에 대한 올바른 사고 모델을 제공합니다.

  • 인트로스펙션 및 동적 코드 도구 – 값과 환경을 들여다보기 위한 id(), hash(), isinstance(), issubclass(), callable(), globals(), locals(); 그리고 런타임에 코드를 생성하는 것이 올바른 답인 드문 경우를 위한 eval() / exec() / compile(). 대부분의 스크립트는 이것들을 결코 건드리지 않지만, 그 존재를(그리고 언제 사용하지 말아야 하는지를) 아는 것은 다른 사람의 Python을 읽는 일의 일부입니다.

  • 텍스트에 대한 패턴 매칭 – 형태를 묘사할 수는 있지만 열거할 수 없는 문자열을 위한 re 모듈. 문자 클래스, 수량자, 캡처 그룹, 앵커, 그리고 탐욕(greedy) 대 게으름(lazy)의 트레이드오프와 더불어, MicroPython의 부분집합이 CPython에 못 미치는 구체적인 지점들. str.findstr.split로 더 이상 해결할 수 없을 때 이를 사용하세요.

  • 내장형을 넘어선 컨테이너 – 타입이 있는 레코드를 위한 collections.namedtuple(), 제한된 링 버퍼와 롤링 윈도우를 위한 collections.deque, 삽입 순서가 동등성의 일부일 때를 위한 collections.OrderedDict, 그리고 일반 리스트 위에 구축되어 “가장 작은 것은 무엇인가” 또는 “가장 시급한 것은 무엇인가”라는 질문에 답하는 heapq. 각각은 네 가지 핵심 컨테이너 타입이 남기는 빈틈을 메웁니다.

  • 일상적인 워크플로 도구 – 기존 컬렉션으로부터 컬렉션을 만드는 컴프리헨션, 데이터를 지연 처리하기 위한 제너레이터와 반복자 프로토콜, 공통된 획득/해제 및 전후 패턴을 감싸기 위한 데코레이터와 컨텍스트 매니저, 그리고 깨진 스크립트를 고친 스크립트로 바꿔주는 디버깅 습관(트레이스백 읽기, repr(), dir(), help(), logging 모듈).

2.42.1. 이 입문서를 나중에 활용하기

이 입문서를 한 번에 읽어내는 글이 아니라 참고 자료로 다루세요. 챕터들은 일부러 짧게 만들었습니다. 슬라이싱이나 컨텍스트 매니저나 컴프리헨션을 다시 떠올리려고 돌아오는 것이 의도된 사용법입니다. 가장 자주 찾는 절을 북마크해 두세요.

나중에 카메라 문서에서 알아보지 못하는 Python 개념을 참조한다면 – 가령 “이것은 컨텍스트 매니저를 반환합니다” 또는 “결과를 반복하세요”와 같이 – 해당 입문서 페이지가 시작하기에 좋은 곳입니다.

2.42.2. 여기서 어디로 갈 것인가

기본 하드웨어 제어는 여러분이 이제 알고 있는 Python 위에 직접 구축됩니다. 입문서가 메모리 안에서 살았다면, 하드웨어 제어는 물리적 세계에서 삽니다 – 핀의 전압, 전선의 펄스, 버스를 통해 다른 칩으로 클럭에 맞춰 전달되는 바이트. 도구 모음은 machine 모듈과 얇은 전자공학 계층으로 옮겨갑니다. 입문서의 모든 것은 그대로 이어집니다. defwith를, 또는 bytearraybytes와 어떻게 다른지를 다시 배울 필요는 없습니다.

하드웨어 자료에서 낯설게 느껴지는 Python 기능을 마주하면, 이 입문서가 돌아올 곳입니다.