PEP 8_스타일 가이드 정리

Rocki_log·2022년 9월 4일
1

Python

목록 보기
5/6
post-thumbnail

가독성이 중요합니다

1 Code Lay-out

1) 들여쓰기

  • 래핑된 요소는 수직으로 정렬
  • 첫번째 줄은 비워둔다
def long_function_name(
        var_one, var_two, var_three,
        var_four):
    print(var_one)
    
if (this_is_one_thing
        and that_is_another_thing):
    do_something()
    
my_list = [
    1, 2, 3,
    4, 5, 6,
    ]

2) 최대 라인 길이

  • 모든 줄을 최대 79자로 제한.
  • 독스트링/주석은 72자로 제한
with open('/path/to/some/file/you/want/to/read') as file_1, \
     open('/path/to/some/file/being/written', 'w') as file_2:
    file_2.write(file_1.read())

3) 이진 연산 줄바꿈

  • 연산 기호를 앞으로
income = (gross_wages
          + taxable_interest
          + (dividends - qualified_dividends)
          - ira_deduction
          - student_loan_interest)

4) 띄어쓰기

  • 불필요한 공백은 피함
  • 최상위 함수와 클래스는 2줄을 띄움
  • 클래스 내부의 메소드들 끼리는 1줄을 띄움
# Wrong:
spam( ham[ 1 ], { eggs: 2 } )
bar = (0, )
ham[1: 9], ham[1 :9]

# Correct:
spam(ham[1], {eggs: 2})
foo = (0,)
ham[1:9], ham[1:9:3]

x = x*2 - 1
hypot2 = x*x + y*y
c = (a+b) * (a-b)

a) 함수의 주석

  • 콜론 양쪽, 화살표가 있는 경우 띄움
# Wrong:
def munge(input:AnyStr): ...
def munge()->PosInt: ...

# Correct:
def munge(input: AnyStr): ...
def munge() -> PosInt: ...

5) 소스파일 인코딩

  • Python 배포판의 코드는 항상 UTF-8
  • Python 표준 라이브러리의 모든 식별자는 ASCII 전용 식별자를 사용해야 하며 가능한 경우 영어 단어를 사용해야함

6) import

  • 일반적으로 별도의 줄에서 import
import os
import sys
from subprocess import Popen, PIPE

A) 배치

  • 항상 파일 상단, 모듈 주석 및 독스트링 바로 뒤, 모듈 전역 및 상수 앞에 배치

B) 라이브러리 그룹화

a) 순서

  1. Standard library imports.
  2. Related third party imports.
  3. Local application/library specific imports.
  • 각 가져오기 그룹 사이에 빈 줄을 넣어야 합니다.

C) __future__

  • __future__ imports 는 docstring 을 제외한 어떤 코드보다 앞에 나와야함

7) 문자열 따옴표

  • 파이썬에서 큰 따옴표, 작은 따옴표 따로 구별하진 않지만 규칙을 정하고 통일하는 것을 권장
  • 삼중 따옴표로 묶여 있을 경우 항상 큰 따옴표로 사용(PEP 267)

8) 후행 쉼표를 사용하는 경우

# Correct:
FILES = [
    'setup.cfg',
    'tox.ini',
    ]
initialize(FILES,
           error=True,
           )

9) 주석

  • 주석은 완전한 문장이어야하고 첫글자는 대문자이다.
  • 마침표까지 찍는다.
  • 영어를 권장한다.

A) 인라인 주석

  • 아껴서 사용한다.
  • 코드와 2 개이상 공백으로 분리한다
x = x + 1                 # Compensate for border

2. Documentation Strings

독스트링 규칙

  • 모든 공개 모듈, 함수, 클래스 및 메서드에 대한 독스트링을 작성해야 함
  • 비공개 메서드에는 독스트링이 필요하지 않지만 메서드가 하는 일을 설명하는 주석이 있어야함

3. Naming Conventions

1) 피해야할 명명 규칙

  • 'l'(소문자 el), 'O'(대문자 oh) 또는 'I'(대문자 눈) 문자를 단일 문자 변수 이름으로 사용하지 않기

2) 패키지 이름

  • 모두 소문자로 된 짧은 이름

3) 클래스 이름

  • 일반적으로 CapWords 규칙에 따름

    CapWords
    CapWords 또는 CamelCase 시작 단어를 대문자로 쓴다.
    단, 두문자어를 사용할 때 두문자어의 모든 문자를 대문자로 사용한다. 따라서 HttpServerError보다 HTTPServerError이 낫다.

  • 단, 예외 이름 및 기본 제공 상수에는 CapWords 규칙 예외

4) 유형 변수 이름

  • 일반적으로 CapWords 규칙에 따름
  • 공분산(covariant) 또는 반공분산(contravariant) 동작을 선언하는 데 사용되는 변수 _co나 _contra 추가하는 것이 좋음
from typing import TypeVar

VT_co = TypeVar('VT_co', covariant=True)
KT_contra = TypeVar('KT_contra', contravariant=True)

5) 함수 및 변수 이름

  • 소문자이고 필요한 경우 밑줄로 단어를 구별한다.

6) 함수 및 메소드 인수

  • self 인스턴스 메소드의 첫 번째 인수로 사용
  • cls 클래스 메소드의 첫 번째 인수로 사용
  • 일반적으로 약어나 맞춤법 손상을 사용하는 것보다 하나의 후행 밑줄을 추가하는 것이 좋음, 예로 들어 clss 보다 class_이 나음

7) 메소드 이름 및 인스턴스 변수

  • 함수 이름 규칙과 같음
  • 밑줄로 구분하고 소문자 사용
  • 비공개 메소드 및 인스턴스 변수는 선행 밑줄 하나 사용

8) 상수

  • 일반적으로 밑줄로 구분하고 모두 대문자로 작성
  • MAX_OVERFLOW
profile
Learning&Running

0개의 댓글