[1부] 파이썬다운 생각이란 무엇일까

원형석·2024년 9월 1일

예상 읽기 시간: 5분

1️⃣ 개요

파이썬다운 스타일은 단순함과 가독성을 극대화하기 위해 권장 패턴을 따르고, 안티 패턴을 피하며, 파이썬 고유 특성에 맞게 코딩하는 것을 의미한다.

1장은 총 13개의 절로 구성되어 있다.

  • ✅는 권장 패턴 (7개)
  • ❌는 안티 패턴 (3개)
  • 🩶는 파이썬 고유 특성 (3개)

각 절의 내용을 3가지 범주로 나눈다면 위와 같이 구분할 수 있다. 그리고 각 절의 주관적인 중요도는 ⭐️로 표기하였다. PEP 8 스타일 가이드는 코드 품질 관리의 핵심이며, 사용 중인 파이썬 버전을 아는 것은 의존성 관리에 필수적이기에 ⭐️⭐️로 중요도를 매겼다. 스타일 가이드 준수를 위해서는 black과 flake8과 같은 정적 검사 도구를 이용하는 것이 좋으며, 의존성 관리는 poetry 같은 도구를 잘 사용하는 것이 필요하다.

개발에 도움되지만 사용 빈도가 낮거나, 필수적이지 않은 챕터는 ⭐️표기를 생략했다. 특히 안티 패턴과 관련된 내용은 중요하지만 습관을 잘 들이면 의식할 필요가 없어 중요도를 표기하지 않았다. 안티 패턴을 피하기 위해서는 파이썬스러운 생각을 체화하는 게 중요하기 때문이다.

2️⃣ 목차


✅ [chapter 2] PEP 8 스타일 가이드를 따르자 ⭐️⭐️
✅ [chapter 4] 복잡한 표현식을 사용하는 대신 헬퍼 함수를 사용하자 ⭐️
✅ [chapter 7] map과 filter 대신 리스트 컴프리헨션을 사용하자 ⭐️
✅ [chapter 9] 컴프리헨션이 클 때는 제너레이터 표현식을 고려하자 ⭐️
✅ [chapter 10] range보다는 enumerate를 사용하자 ⭐️
✅ [chapter 11] 이터레이터를 병렬로 처리하려면 zip을 사용하자
✅ [chapter 13] try/except/else/finally에서 각 블록의 장점을 이용하자

❌ [chapter 6] 한 슬라이스에 start, end, stride를 함께 쓰지 말자
❌ [chapter 8] 리스트 컴프리헨션에서 표현식을 두 개 넘게 쓰지 말자
❌ [chapter 12] for와 while 루프 뒤에는 else 블록을 쓰지 말자

🩶 [chapter 1] 사용 중인 파이썬의 버전을 알자 ⭐️⭐️
🩶 [chapter 3] bytes, str, unicode 차이점을 알자 ⭐️
🩶 [chapter 5] 시퀀스를 슬라이스하는 방법을 알자 ⭐️


3️⃣ 리뷰

파이썬의 시퀀스 데이터 타입 및 반복문과 관련된 내용이 가장 많은 분량을 차지하고 있다(13장 중 9장). 파이썬이 다른 언어에 비해 데이터 핸들링에 유용한 이유는 시퀀스 데이터 타입을 효율적으로 지원하는 데이터 모델과 문법 덕분이다. 파이썬의 슬라이싱, 리스트 컴프리헨션, 제너레이터, zip() 함수가 대표적인 예이다.

복잡한 작업을 단순하고 효율적으로 표현해주는 기능들 덕분에 파이썬 개발자들은 읽기 쉽고 유지보수하기 쉬운 코드를 작성할 수 있게 되었다. 슬라이싱을 통해서 특정 요소를 보다 쉽게 추출할 수 있고, 리스트 컴프리헨션을 사용해 필터링과 변환 작업을 한 줄로 처리할 수 있으며, 제너레이터로 대용량 데이터를 메모리 효율적으로 다룰 수 있으며, zip() 함수로 여러 시퀀스를 동시에 순회할 수 있게 되었다.

이러한 기능들은 The Zen Of Python에 명시된 설계 원칙을 반영한다. 시퀀스 데이터 타입 뿐만 아니라 파이썬의 다양한 문법적인 요소들이 해당 설계 원칙을 반영해 작성되었다. 파이썬 문법에 어느 정도 익숙해진 개발자라면, 언어 설계자들이 추구한 가치가 무엇인지에 대해서 한 번쯤 고민해보는 시간을 가져도 좋을 것이다. 언어는 가치의 구현체이기 때문이다.

>>> import this  # The Zen of Python, by Tim Peters

4️⃣ 추가 조사

파이썬 프로젝트들에서 특정 Python idiom(언어적 관용 패턴)이 얼마나 자주 사용되는지를 비교한 표를 보면 List comprehension, Decorator, with 등이 널리 쓰이는 걸 확인할 수 있다.

There Is More Than One Way to Zen Your Python

profile
Python을 좋아합니다.

0개의 댓글