스프링 프레임워크로 솔루션을 개발하는 팀에서 혼자 파이썬으로 개발을 진행하다보니,
가독성 높은 코드, 군더더기 없는 파이썬 클린 코드에 대한 욕심이 생기는 것 같다.
그래서 시작한 건 Baekjoon Online Judge 매일 한 문제 이상 푸는 것과 Effective Python 책을 읽는 것이다.
Baekjoon Online Judge https://www.acmicpc.net/
Effective Python 2nd (파이썬 코딩의 기술) https://www.aladin.co.kr/shop/wproduct.aspx?ItemId=254321728
Effective Python 책은 PEP 8 가이드 외에도 파이썬 중급, 고급 개발자로 성장하기 위해서
밥아저씨(참 쉽죠 그 아저씨 아님)의 클린 코드 책 처럼 곁에 두고 내 것으로 만들어야 할 기법들이 소개되어 있다.
이 책에서 가장 첫 머리에 소개하는 내용은 현재 사용 중인 파이썬의 버전을 알아두라는 것이다.
터미널이나 cmd 에서는 python --version 으로 pc에 설치된 파이썬 버전을 확인할 수 있다.
python --version
파이썬 코드 내에서 확인 하는 방법은 내장 모듈인 sys 를 불러와서 확인할 수 있다.
import sys
print(sys.version)
print(sys.version_info)
그 다음은 PEP 8 스타일 가이드에 대한 소개이다.
PEP 8 은 파이썬 개선 제안 (Python Enhancement Proposal) # 8 의 줄임말로
파이썬 코드를 어떤 형식으로 작성할 지 가이드라인을 제공한다.
원문은 https://peps.python.org/pep-0008/ 에 있으며,
한국어 버전은 https://wikidocs.net/7896 이곳에서 읽을 수 있다.
1. 공백(탭, 스페이스, 개행 등) 에 대한 가이드라인
- 탭 대신 스페이스(4칸)를 사용해 들여쓰기
- 라인 길이는 79개 문자 이하로 작성하기
- 파일 안에서 각 함수와 클래스 사이에는 빈 줄을 두 줄 넣기
- 클래스 안에서 메서드와 메서드 사이에는 빈 줄을 한 줄 넣기
- dict 에서는 key: value 로 작성하기 (key 와 : 사이에는 공백 없고, : 과 value 사이에는 공백을 하나 넣기)
- 변수를 대입할 때는 = 전후에 스페이스 하나씩 넣기 (var = 10)
- 타입 표기를 덧붙이는 경우 var: str 로 작성하기 (변수명과 : 사이에는 공백 없고, : 과 타입 정보 사이에는 공백 하나 넣기)
2. 명명 규칙에 대한 가이드라인
- 함수, 변수, 속성은 snake_case로 작성하기
- 보호해야 하는 인스턴스 속성은 앞에 밑줄로 시작하기 ( _name)
- 비공개(private) 인스턴스 속성은 앞에 밑줄 두개로 시작하기 ( __name)
- 클래스는 PascalCase로 작성하기
- 모듈 수준의 상수는 대문자로 하고 단어와 단어 사이는 밑줄로 작성하기 (MAX_VALUE)
- 클래스 내의 인스턴스 메소드는 첫 번째 인자의 이름으로 반드시 self를 사용하기
- 클래스 메소드는 첫 번째 인자의 이름으로 반드시 cls를 사용하기
3. 식과 문장에 대한 가이드라인
- 빈 컨테이너를 검사할 때는 길이를 0과 비교하지 않고 (if len(foo) == 0 대신 if not foo) 사용하기
- 비어있지 않은 컨테이너를 검사할 때는 0과 큰지 비교하지 않고 (if len(foo) > 0 대신 if foo ) 사용하기
- if 문, for 문, while 문을 작성할 때는 명확성을 위해 각 부분을 여러 줄에 나눠서 작성하기
4. import 사용법에 대한 가이드라인
- import 문을 항상 파일 맨 앞에 위치시키기
- import 순서는 표준 라이브러리 모듈, 서드파티 모듈, 직접 만든 모듈 순서로 섹션을 나누고,
각 섹션에서는 모듈 순서로 불러오기
IDE 툴로 PyCharm 을 사용하면 PEP 8 스타일이 지켜지지 않을 경우 경고 메시지가 뜨기 때문에
pylint 를 설치하지 않더라도 PEP 8 스타일에 맞춰 코드를 작성할 수는 있다.
하지만 여러 명이서 같이 작업할 때는 lint의 도움이 필요할 것 같다.
'Python' 카테고리의 다른 글
[Python] requirements.txt 생성 (0) | 2022.12.29 |
---|---|
[Python] object of type int32 is not json serializable (0) | 2022.12.27 |
[Python] 오늘 날짜 기준 년/월/일 디렉토리 생성 (0) | 2022.12.27 |
댓글