Notice
Recent Posts
Recent Comments
Link
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
Tags
more
Archives
Today
Total
관리 메뉴

개발자입니다

[클린코드 파이썬] 3장: 코딩 스타일 정립과 코드 포매팅 자동화 본문

Python/클린 코드, 이제는 파이썬이다

[클린코드 파이썬] 3장: 코딩 스타일 정립과 코드 포매팅 자동화

끈기JK 2024. 8. 27. 20:54

스타일 가이드와 PEP 8

파이썬 개선 제안 8(이하 PEP 8)은 파이썬 코어 개발팀이 작성한 스타일 가이드 중 하나다.

PEP 8 문서는 https://www.python.org/dev/peps/pep-0008/ 에서 읽어볼 수 있다.

 

 

가로 간격

들여쓰기를 위한 공백 문자 사용

 

코드 행 내의 공백 활용

연산자와 식별자 사이에 공백 한 칸
# 잘된 예
blanks = blanks[:i] + secretWord[i] + blanks[i + 1 :]

# 나쁜 예
blanks=blanks[:i]+secretWord[i]+blanks[i+1:]

 

 

구분자는 앞쪽이 아니라 뒤쪽에 공백 한 칸
# 잘된 예
def spam(eggs, bacon, ham):
	weights = [42.0, 3.1415, 2.718]
    
# 나쁜 예
def spam(eggs,bacon,ham):
	weights = [42.0,3.1415,2.718]

구분자 앞에 공백을 추가해서는 안 된다. 구분자가 불필요하게 눈에 띄기 때문이다.

 

마침표의 앞뒤에는 공백을 넣지 않는다
# 잘된 예
'Hello, world'.upper()

# 나쁜 예
'Hello, world' . upper()
# 잘된 예
spam[2]
spam[0:3]
pet['name']

# 나쁜 예
spam [2]
spam	[0:3]
pet ['name']

 

여는 괄호 뒤와 닫는 괄호 앞에는 공백을 넣지 않는다
# 잘된 예
def spam(eggs, bacon, ham):
	weights = [42.0, 3.1415, 2.718]
    
# 나쁜 예
def spam( eggs , bacon , ham ):
	weights = [ 42.0 , 3.1415 , 2.718 ]

 

코드행 끝의 주석 앞에는 공백 2칸
# 잘된 예
print('Hello, world!')  # 인사말 출력

# 나쁜 예
print('Hello, world!') # 인사말 출력
print('Hello, world!')# 인사말 출력

 

 

세로 간격

PEP 8에는 코드에 빈 행을 삽입하기 위한 몇 가지 지침이 있다. 즉 함수나 클래스는 두 줄의 빈 행을 넣고, 클래스 내의 메소드는 빈 행 한 줄을 넣어 구분해야 한다고 명시했다.

# 나쁜 예
class ExampleClass:
    def exampleMethod1():
    	pass
    def exampleMethod2():
    	pass
def exampleFunction():
	pass

# 잘된 예
class ExampleClass:
    def exampleMethod1():
    	pass

    def exampleMethod2():
    	pass


def exampleFunction():
	pass

 

세로 간격의 모범 사례

세미콜론을 넣어 두 행을 구분하면 한 행에 쓸 수 있다.

print('What is your name?')
name = input()

print('What is your name?'); name = input()

 

if, for, def, class 문과 같이 콜론(:)으로 끝나는 문에 한 줄짜리 블록으로 따라오게 할 수 있다.

if name == 'Alice':
    print('Hello, Alice!')
    
if name == 'Alice': print('Hello, Alice!')

 

다음과 같은 import 문 하나로 여러 모듈을 가져올 수도 있다.

import math, os, sys

하지만 PEP 8에서는 다음과 같이 모듈당 하나의 import 문을 사용하는 방식으로 나눠 쓸 것을 추천한다.

import math
import os
import sys

import 문 별로 행을 분리해서 코드를 작성해두면 임포트된 모듈의 추가 또는 제거 여부를 시각적으로 확인하기가 수월해진다.

 

또한 PEP 8에서는 import 문을 다음과 같이 세 그룹으로 묶어서 번호 순서대로 배치할 것을 권장한다.

  1. math, os, sys 등 파이썬 표준 라이브러리의 모듈
  2. 셀레늄Selenium, 리퀘스트Requests, 장고 등 서드파티 모듈
  3. 현재 작성중인 프로그램의 일부인 로컬 모듈

 

엄격한 코드 포매터, 블랙

블랙은 .py 파일의 코드를 자동으로 포매팅한다.

 

블랙 도구 설치 방법

>python -m pip install --user black

 

명령행에서 블랙을 실행하는 방법

>python -m black yourScript.py

 

블랙의 행 길이 설정 조정

파이썬 코드의 표준 행 길이는 80자(아스키 문자 기준)다.

>python -m black -l 120 yourScript.py

 

블랙의 문자열 큰따옴표 설정 비활성화

문자열 리터럴을 여러분이 작성한 대로 놔두고, 따옴표의 종류를 블랙이 변경하지 않게 하고 싶다면 -S 명령행 옵션을 사용하자(여기서 S는 대문자라는 점에 유의하자)

>python -m black -S yourScript.py

 

블랙이 변경할 내용 미리보기
>python -m black --diff yourScript.py