로보틱스를 시작하며 파이썬을 다시 잡았어요. 읽을 줄은 알아서 만만하게 봤는데, C#처럼 값과 참조를 구분하는 언어의 직관과 부딪히는 지점이 여럿이었어요.
우선순위는 현업 빈도순으로
문법책 순서로 정리하면 한 달 뒤에 남는 게 없어서, 배운 걸 쓰는 빈도순으로 다시 줄 세웠어요.
| 티어 | 빈도 | 항목 | 기준 |
|---|---|---|---|
| 1 | 매일 | f-string · 컴프리헨션 · dict.get · enumerate/zip · with · join · 언패킹 · truthiness · sorted(key=…) | 안 보고 나와야 해요 |
| 2 | 주 단위 | deque · Counter · pathlib | 형태만 기억하고 찾아 써요 |
| 3 | 함정 회피 | 아래 세 가지 | 쓰는 지식이 아니라 피하는 지식 |
변수는 객체에 붙는 이름이에요
b = a는 복사가 아니라 같은 객체에 이름을 하나 더 붙이는 거예요.def append_log(item, logs=None): # 기본값을 None으로 두고
if logs is None:
logs = [] # 함수 안에서 새로 만들어요
logs.append(item)
return logs컴프리헨션의 if는 위치가 역할이에요
예외를 대하는 방향
예외는 비싸니 미리 검사하라(LBYL)고 배운 쪽이라면 파이썬은 반대예요. “허락을 구하지 말고 용서를 구하라”(EAFP), 일단 실행하고 예외로 처리해요.
if key in d: # LBYL: 먼저 검사하고 사용
v = d[key]
v = d.get(key, default) # EAFP: 일단 꺼내고 예외 처리 (또는 get 한 줄)검사와 사용 사이에 상태가 바뀌는 경쟁 조건을 원천 차단하는 이점도 있어요.
with open(path) as f:는 C#의 using과 같은 역할이에요. 블록을 벗어나면 예외가 나도 자원이 해제돼요. 로봇 쪽에서는 파일보다 시리얼 포트에서 중요하다고 해요. 포트를 안 닫고 죽은 프로세스 때문에 재접속이 막히는 게 흔한 사고 패턴이거든요.
상속은 프레임워크가 요구해요
class MyNode(Node): # ROS 2 노드
class Net(nn.Module): # PyTorch 모델앞으로 쓸 ROS 2 노드도 PyTorch 모델도 “부모를 상속받고 __init__을 오버라이드하고 메서드를 얹는” 같은 패턴이라, 기초 문법이 커리큘럼 전체의 뼈대와 이어져 있어요.
정리는 assert 드릴로
정리 노트만으로는 손에 남지 않아서, assert 셀프체크가 달린 드릴 파일을 따로 만들었어요. 문제는 교과서 예제 대신 로봇 시나리오로요.
def next_command(queue):
"""queue가 None이면 'ERROR', 빈 리스트면 'IDLE',
아니면 첫 명령을 pop(0)으로 꺼내 반환. None과 빈 값을 구분할 것."""통신이 끊긴 상태(None)와 할 일이 없는 상태(빈 리스트)를 구분하는 truthiness 문제인데, 로봇 콜백에서 헷갈리면 그대로 버그가 돼요. TODO를 채워 실행하면 assert가 문제마다 통과·실패를 찍고, 기준은 자료 없이 전부 통과예요.
다음은 처음으로 로봇의 몸, 모터와 실시간 신호를 배운 1kHz 제어 주기와 지터 — 로봇 제어가 1ms를 다투는 이유으로 이어져요.