ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 파이썬 코딩 스타일 가이드라인 PEP8
    CS/공통 2022. 4. 26. 11:13
    728x90
    Code is more often read,
    than
    it's  written


    PEP8은 Python Enhance Proposal을 말하는 것으로

    파이썬 코드를 어떻게 구성할지 알려주는 파이썬 스타일 가이드이다.

     

    클린 코드를 작성하기 위해 일관성 있는 스타일을 사용하여  유지보수가 더욱 쉬워지고

    가독성을 높여 다른 프로그래머들과의 협업을 쉽게 해준다.

     

     

    들여 쓰기

    파이썬에서 공백은 문법적으로 의미가 있다.

    특히 코드의 명료성을 지키기 위해 신경써 주어야 한다.

    • 탭이 아닌 스페이스를 사용하여 들여 쓰기를 한다. (일관되지 않게 들여 쓰기를 탭과 공백을 혼합해서 사용하면 에러가 발생)
    • 문법적으로 의미 있는 들여 쓰기는 스페이스 4 개를 사용한다.
    • 표현식이 길어서 다음 줄로 이어지면 일반적인 들여쓰기 수준에 추가로 스페이스 4 개를 사용한다.
    • 파일에서 함수와 클래스는 빈 줄 두 개로 구분해야 한다.
    • 리스트 인덱스, 함수 호출, 키워드 인수 할당에는 스페이스를 사용하지 않는다.
    • 변수 할당 앞뒤에 스페이스를 하나만 사용한다.

     

    최대 라인 길이

    • 모든 줄을 최대 79자로 제한한다.
    • 주석이나 DocString과 같은 구조적 제한이 적은 긴 텍스트 블록의 경우 줄 길이는 72자로 제한되어야 한다.
    • 긴 줄을 감싸는 선호되는 방법은 괄호, 대괄호 및 중괄호 안에 Python의 암시적 줄 연속을 사용하는 것이다.
    • 긴 줄은 표현식을 괄호로 묶어 여러 줄로 나눌 수 있다.

     

    빈 줄

    • 최상위 함수 및 클래스 정의를 두 개의 빈 줄로 구분한다.
    • 클래스 내의 메서드 정의는 단일 빈 줄로 둘러싸여 있다.
    • 관련 기능의 그룹을 구분하기 위해 여분의 빈 줄을 사용할 수 있다.

     

    Import

    • import는 일반적으로 별도의 줄에 있어야 한다. 
    • 항상 파일 상단, 모듈 주석 및 DocString 바로 뒤, 모듈 전역 및 상수 앞에 배치한다.
    • 1. 표준 라이브러리, 2. 다른 모듈 import, 3. 로컬 애플리케이션/라이브러리의 특정 import 순서로 그룹화 되어야 하며 그룹 사이에 빈 줄을 넣어야 한다.

     

    모듈 수준 dunder 이름

    __all__, __author__ 등과 같은 모듈 수준 "dunders"(선행 밑줄 두 개와 후행 밑줄 두 개가 있는 이름)는 모듈 DocString 뒤에 있지만

    imports를 제외한 __version__ 모든 import 문 앞에 위치해야 한다.

    문자열 따옴표

    • 파이썬에서 작은 따옴표 문자열과 큰따옴표 문자열은 동일하지만 동일하게 보는 것을 권장하지 않는다.
    • 규칙을 정하고 준수하는 것이 좋다.
    • 그러나 문자열에 작은 따옴표 또는 큰 따옴표 문자가 포함되는 경우 다른 하나를 사용하면 문자열에서 백슬래시를 방지하여 가독성을 향상시킨다.

    공백에 대하여

    //괄호, 대괄호 또는 중괄호 바로 안에
    # Correct:
    spam(ham[1], {eggs: 2})
    
    # Wrong:
    spam( ham[ 1 ], { eggs: 2 } )
    
    //후행 쉼표와 다음 닫는 괄호 사이:
    # Correct:
    foo = (0,)
    
    # Wrong:
    bar = (0, )
    
    //쉼표, 세미콜론 또는 콜론 바로 앞
    # Correct:
    if x == 4: print(x, y); x, y = y, x
    
    # Wrong:
    if x == 4 : print(x , y) ; x , y = y , x
    
    //문자열 슬라이싱
    # Correct:
    ham[1:9], ham[1:9:3], ham[:9:3], ham[1::3], ham[1:9:]
    ham[lower:upper], ham[lower:upper:], ham[lower::step]
    ham[lower+offset : upper+offset]
    ham[: upper_fn(x) : step_fn(x)], ham[:: step_fn(x)]
    ham[lower + offset : upper + offset]
    
    # Wrong:
    ham[lower + offset:upper + offset]
    ham[1: 9], ham[1 :9], ham[1:9 :3]
    ham[lower : : upper]
    ham[ : upper]
    
    //함수 호출의 인수 목록을 시작하는 여는 괄호 바로 앞
    # Correct:
    spam(1)
    
    # Wrong:
    spam (1)
    
    //인덱싱 또는 슬라이싱을 시작하는 여는 괄호 바로 앞
    # Correct:
    dct['key'] = lst[index]
    
    # Wrong:
    dct ['key'] = lst [index]
    
    //할당 연산자 주위에 하나 이상의 공백을 두어 다른 연산자와 정렬
    # Correct:
    x = 1
    y = 2
    long_variable = 3
    
    # Wrong:
    x             = 1
    y             = 2
    long_variable = 3

     

     

    코멘트(주석)

    • 코드와 모순되는 주석은 주석이 없는 것보다 나쁘다.
    • 코드가 변경될 때 항상 주석을 최신 상태로 유지하는 데 우선 순위를 두어야 한다.
    • 주석은 완전한 문장이어야 한다.
    • 소문자로 시작하는 식별자가 아닌 경우 첫 번째 단어는 대문자여야 한다.
    • 인라인 주석은 주의를 산만하게 하니 아껴서 사용한다.

    네이밍 규칙

    • 함수, 변수, 속성은 lowercase_underscore 형식을 따른다.
    • 보호(protected) 인스턴스 속성은 _leading_underscore 형식을 따른다.
    • 비공개(private) 인스턴스 속성은 __double_leading_underscore 형식을 따른다.
    • 클래스와 예외는 CapitalizeWord 형식을 따른다.
    • 모듈 수준 상수는 ALL_CAPS 형식을 따른다.
    • 클래스의 인스턴스 메서드에서는 첫 번째 파라미터(해당 객체를 참조)의 이름을 self로 지정한다.
    • 클래스 메서드에서는 첫 번째 파라미터(해당 클래스를 참조)의 이름을 cls로 지정한다.

     

     

     

     

    참고:

    파이썬 코딩의 기술 -브렛 슬라킨 저

    https://peps.python.org/pep-0008/#code-lay-out

    728x90

    'CS > 공통' 카테고리의 다른 글

    파이썬 Iterator & Generator  (0) 2022.03.12

    댓글

oguuk Tistory.