YAPF(Yet Another Python Formatter)
Google에서 개발한 파이썬 코드 포매터.
이는 마치 전문 편집자가 문서의 형식을 일관되게 정리하는 것처럼, 파이썬 코드의 스타일을 자동으로 정리해주는 도구이다.
YAPF는 코드의 논리는 그대로 유지하면서, 가독성과 일관성을 높이는 방식으로 코드를 재구성한다.
주요 특징
- 다양한 스타일 지원: PEP 8, Google, Facebook 등 사전 정의된 스타일을 제공한다.
- 높은 구성 가능성: 사용자가 세부적인 포맷팅 규칙을 설정할 수 있다.
- 강력한 재포맷팅: PEP 8을 준수하는 코드도 더 나은 가독성을 위해 재구성한다.
장점
- 높은 유연성과 구성 가능성
- 다양한 내장 스타일 제공
단점
- 설정의 복잡성
- 때로는 비결정적인 포맷팅 결과
작동 방식 이해하기
YAPF는 파이썬 코드를 다음과 같은 단계로 처리한다:
- 먼저 코드를 파싱하여 추상 구문 트리(AST)를 생성한다.
- 이 구문 트리를 기반으로 다양한 포매팅 옵션을 적용한다.
- 최종적으로 깔끔하게 포매팅된 코드를 생성한다.
실제 예시를 통해 YAPF의 동작을 살펴보자:
|
|
YAPF의 주요 기능과 설정
YAPF는 다양한 스타일 옵션을 제공하며, 이를 통해 팀의 코딩 스타일 가이드라인을 자동으로 적용할 수 있다.
들여쓰기 관리:
줄 바꿈 최적화:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
# 포매팅 전 def long_function_name(parameter1, parameter2, parameter3, parameter4, parameter5, parameter6, parameter7): print("처리 중…") # YAPF 적용 후 def long_function_name( parameter1, parameter2, parameter3, parameter4, parameter5, parameter6, parameter7, ): print("처리 중…")
YAPF 설정 파일 사용하기
프로젝트의 루트 디렉토리에.style.yapf 파일을 생성하여 YAPF의 동작을 커스터마이즈할 수 있다:
실제 개발 환경에서의 활용
명령줄에서의 사용:
에디터 통합:
VS Code나 PyCharm과 같은 IDE에서 저장 시 자동 포매팅을 설정할 수 있다:
고급 사용 예시
복잡한 데이터 구조 포매팅:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
# 포매팅 전 data = {'users':[{'name':'John','age':30,'hobbies':['reading','swimming']},{'name':'Jane','age':25,'hobbies':['painting','running']}]} # YAPF 적용 후 data = { 'users': [ { 'name': 'John', 'age': 30, 'hobbies': ['reading', 'swimming'] }, { 'name': 'Jane', 'age': 25, 'hobbies': ['painting', 'running'] } ] }
클래스 정의 포매팅:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
# 포매팅 전 class ComplicatedClass ( BaseClass ): def __init__(self, name,age ): self.name=name;self.age=age def get_info(self ): return f"{self.name} is {self.age} years old" # YAPF 적용 후 class ComplicatedClass(BaseClass): def __init__(self, name, age): self.name = name self.age = age def get_info(self): return f"{self.name} is {self.age} years old"