ChangHyeon Nam's Blog notes and thoughts

PEP 8 스타일 가이드

Comments

Fluent Python 1/3가량 읽었지만, 아직 제 수준보다 높은 책인 것 같아 ‘파이썬 코딩의 기술 (Effective Python)’으로 갈아 탔습니다. Chapter 01 파이썬 답게 생각하기 챕터로써, 하루에 Better Way 2개씩 업로드 할 예정 입니다.


Pythonic 스타일은 컴파일러가 엄격히 통제하거나 사용하라고 강요하는 스타일이 아니라 명시적이고, 복잡한것보다 단순하게, 가독성을 최대한 높이는 방향으로 코드를 적는 것입니다.

The Zen of Python : 링크를 들어가면 파이썬의 기본 철학을 볼 수 있습니다.


Better Way 01 : 사용중인 파이썬의 버전을 알아두라

$ python3 --version
Python 3.8.7
import sys
print(sys.version_info)
print(sys.version)
# sys.version_info(major=3, minor=8, micro=7, releaselevel='final', serial=0)
# 3.8.7 (v3.8.7:6503f05dd5, Dec 21 2020, 12:45:15)
# [Clang 6.0 (clang-600.0.57)]

위와 같은 방법으로 python의 버전을 확인할 수 있습니다. 여기서 말하려는 바는 python2는 수명이 다해, 새로운 기능에 대한 backporting이 이뤄지지 않기 때문에 python3를 사용하라는 것입니다.


Better Way 02 : PEP 8 스타일 가이드를 따르라

파이썬 개선 제안 (Python Enhancementn Proposal) #8, 또는 PEP8은 파이썬 코드를 어떤 형식으로 작성할지 알려주는 스타일 가이드입니다. 협업할때를 포함해, 가독성 및 나중에 코드를 수정하기도 쉽고, 저지르기 쉬운 실수를 피할 수 있습니다. PEP 8은 파이썬 언어가 개선 됨에 따라 계속 변합니다.

공백

파이썬 프로그래머들은 코드의 의미를 명확히 하는 데 공백이 미치는 영향이 특히 민감합니다.

  • 탭 대신 스페이스를 사용해 들여쓰기
  • 문법적으로 중요한 들여쓰기에는 4칸 스페이스 사용
  • 라인 길이는 79개 문자 이하
  • 긴 식을 다음줄에 쓸 경우 일반적인 들여쓰기보다 4칸 스페이스를 더 들여 쓰기
  • 파일 안에서 각 함수와 클래스 사이에는 빈 줄을 두줄 삽입
  • 클래스 안에서 메서드와 메서드 사이에는 빈 줄을 한줄 삽입
  • 딕셔너리에서 key와 콜론(:) 사이에는 공백 X, 한줄 안에 key와 value를 같이 넣는 경우 콜론 다음에 스페이스 삽입
  • 변수 대입에서 = 전후에는 스페이스를 하나씩 삽입
  • 타입 표기를 덧붙이는 경우 변수 이름과 콜론 사이에 공백을 넣지 않고, 콜론과 타입정보 사이에 스페이스 하나 삽입

명명 규약

  • 함수, 변수, attribute에는 snake case 사용. ex) lowercase_underscore
  • 보호해야 하는 인스턴스 attribute에는 _(밑줄로) 시작. ex) _leading_underscore
  • private 인스턴스 attribute에는 __(밑줄 두개)로 시작. ex) __leading_underscore
  • 클래스는 Camel case사용. ex) CapitalizedWord
  • 모듈 수준의 상수는 모든 글자를 대문자로 사용하고, 밑줄로 각 단어 연결. ex) ALL_CAPS
  • 클래스에 들어 있는 인스턴스 메서드는 호출 대상 객체를 가리키는 첫번째 인자(arguement)는 반드시 self를 사용
  • 클래스 메서드는 클래스를 가리키는 첫 번째의 인자의 이름으로 반드시 cls를 사용.

식과 문

  • if a is not b ( if a not is b가 아닌)
  • 빈 컨테이너나 시퀀스에서 길이를 0과 비교하지 않는다. (if len(something)==0 를 사용하지 말자.) 빈 컨테이너나 시퀀스는 암묵적으로 False로 취급됨. 마찬가지로 비어있지 않은 컨테이너와 시퀀스는 암묵적으로 True로 평가됨.
  • 한 줄짜리 if문, for, while, except 문 사용하지 말아라.
  • 식을 한줄에 쓸 수 없는 경우, 식을 괄호로 둘러싸고 줄바꿈과 들여쓰기 이용.
  • 여러 줄에 걸쳐 식을 쓸 때는 줄이 계속 된다는 표시하는 \ 문잡대신 괄호 사용.

임포트

  • import문을 항상 파일 맨 앞에 위치.
  • 모듈을 임포트 할때는 절대적인 이름(경로)을 사용하고 현 모듈의 경로에 상대적인 이름을 사용하지 말아라. (from bar import foo [O], import foo [X])
  • 반드시 상대적인 경로를 사용하는 경우에는 from . import foo와 같이 명시적인 구문 사용.
  • import를 적을 때는 표준 라이브러리 모듈, 서드 파티 모듈, 만든 모듈 순서로 섹션을 나눠라. (알파벳 순서)