6.2 네이밍·코딩 컨벤션

실습 · 연습문제 1개

단위 접미사를 SI 단위로 바꾸기 units-to-si

계측 장비마다 단위가 다르다. 한 장비는 전압을 mV로, 다른 장비는 V로 저장하고, 시간은 ms·min·h가 섞여 들어온다. 변수 이름에 단위 접미사를 붙이는 규칙을 지켰다면, 이름만 보고 단위를 통일할 수 있다.

함수 to_si(record, passthrough=())를 완성한다. record는 이름 → 값 dict이고, 값은 숫자 또는 NumPy 배열이다. 이름의 마지막 밑줄 뒤가 단위 접미사다(voltage_mv의 접미사는 mv).

접미사 바꾼 접미사 변환
mv · kv · v v ×1e-3 · ×1e3 · 그대로
ma · a a ×1e-3 · 그대로
ms · min · h · s s ×1e-3 · ×60 · ×3600 · 그대로
mah · ah ah ×1e-3 · 그대로
c · k k +273.15 · 그대로
  • 반환값은 새 dict다. 이름의 접미사를 바꾸고(voltage_mv → voltage_v), 값을 변환한다. 입력 record는 바꾸지 않는다.
  • 섭씨 → 켈빈은 곱셈이 아니라 더하기다. 온도 차이가 아니라 온도 자체를 바꾸는 변환이다.
  • passthrough에 있는 이름(예: "cell_id", "cycle_index")은 단위가 없는 값으로 보고 그대로 둔다.
  • 밑줄이 없거나 표에 없는 접미사를 가진 이름은 ValueError를 낸다. 단위를 알 수 없는 값을 조용히 통과시키지 않는다.
  • 변환 결과 이름이 겹치면(예: voltage_mv와 voltage_v가 함께 있음) ValueError를 낸다. 어느 값을 쓸지 함수가 대신 정하지 않는다.
to_si({"voltage_mv": 3700.0, "time_min": 30.0, "temp_c": 25.0})
# {'voltage_v': 3.7, 'time_s': 1800.0, 'temp_k': 298.15}