1. Pythonic Thinking

  1. Know which version of Python you’re using.
  • Python 3은 가장 업데이트되고 지원이 잘 되는 Python의 버전이다. 프로젝트에는 이것을 써라.
  • 시스템에서 명령어로 실행가능한 Python을 당신이 예상하는 버전으로 맞춰라.
  • Python 2는 2020년부터 지원이 종료되므로 쓰지 마라.

2. Follow the PEP 8 style guide.

  • Python 코드를 쓸 때는 항상 PEP 8 가이드를 따라라.
  • 큰 Python 커뮤니티와 코딩 스타일을 공유하는 것은 협업을 용이하게 한다.
  • 일관된 스타일을 쓰는 것은 코드 수정을 쉽게 한다.

3. Know the differences between bytes and str.

  • bytes는 8비트 값의 배열이고, str은 유니코드 코드 포인트의 배열이다.
  • 받는 입력이 당신이 예상하는 인코딩의 문자열임을 보장하기 위해 헬퍼 함수를 사용하라.
  • bytes와 str은 함께 연산자들과 사용될 수 없다.
  • 파일에서 바이너리 데이터를 읽고 쓰고 싶으면 rb, wb 모드로 열어라.
  • 파일에서 문자열 데이터를 읽고 쓰고 싶으면 인코딩에 유의하라. open에 encoding 파라미터를 명시적으로 넣으라.

4. Prefer interpolated F-strings over C-style format strings.

  • C 스타일 포맷 문자열들은 여러 알아야 하는 점과 번잡성 문제가 있다.
  • str.format은 표현력이 더 좋지만, 여전히 C 스타일 포맷 문자열과 비슷한 문제점을 공유하므로 피해야 한다.
  • F-문자열들은 C 스타일 포맷 문자열의 문제점을 해결한 포매팅이다.
  • F-문자열들은 간결하고 강력하다. 임의의 Python 표현식들이 직접적으로 포맷 한정자에 삽입될 수 있게 하기 때문이다.

5. Write helper functions instead of complex expressions.

  • Python의 문법은 지나치게 복잡하고 읽기 힘든 한 줄짜리 표현식을 쓰도록 한다.
  • 특히 같은 작업을 반복해야 할 때, 이러한 복잡한 표현식들을 헬퍼 함수로 옮겨라.
  • 표현식 내 or나 and를 쓰는 대신 if/else를 쓰는 것이 가독성을 높인다.

6. Prefer multiple assignment unpacking over indexing.

  • Python은 한 명령문에서 여러 값에 할당할 수 있는 언패킹을 제공한다.
  • Python에서 언패킹은 임의의 반복열에 적용할 수 있으며, 반복열 안에 반복열이 있는 경우에도 적용할 수 있다.
  • 시퀀스가 있을 때 명시적으로 인덱싱을 하는 대신 언패킹을 해서 가독성을 높여라.

7. Prefere enumerate over range.

  • enumerate는 반복자 내에서 순회를 하면서 인덱스가 필요할 때 유용하다.
  • range로 순회하며 인덱싱하는 것보다 enumerate를 선호하라.
  • enumerate의 두 번째 매개변수에 순회 시작 지점을 지정시킬 수 있다. 기본값은 0이다.

8. Use zip to process iterators in parallel.

  • zip 내장 함수로 여러 반복자를 병렬로 묶어 순회하라.
  • zip은 게으른 생성자로 튜플을 생성하므로, 무한대로 긴 입력에 대해서도 쓸 수 있다.
  • zip은 길이가 다른 반복자를 제공한다면, 가장 짧은 길이의 반복자로 맞춘다.
  • zip이 길이가 가장 긴 반복자로 맞추게 하고 싶다면, zip_longest를 사용하라.

9. Avoid else blocks after for and while loops.

  • Python은 for와 while 반복문 직후에 else를 사용할 수 있게 하는 특별한 문법을 제공한다.
  • 이 else 블록은 반복문에서 break가 발생하지 않았을 때만 시행된다.
  • 반복문 직후 else를 사용하는 것은 비직관적이고 혼란스럽기 때문에 피하라.

10. Prevent repetition with assignment operators.

  • 대입 연산자 :=는 한 표현식 내에서 대입과 변수명에 대한 평가를 동시에 하므로 반복을 줄인다.
  • 대입 표현식이 다른 큰 표현식 내의 부분 표현식으로 등장할 때에는 괄호로 감싸야 한다.
  • switch/case와 do/while 루프가 Python에서는 불가능하지만, 대입 연산자로 그 기능을 더 간결하게 흉내낼 수 있다.