Python

[PEP8] Code Lay-out

ju_young 2022. 2. 4. 16:22
728x90

들여쓰기

  • 들여쓰기는 4개의 공백을 사용
# 올바른 예

# 괄호 기호에 맞춰 정렬 
foo = long_function_name(var_one, var_two, 
                         var_three, var_four) 

# arguments를 구별하기 위해 들여쓰기를 추가
def long_function_name( 
        var_one, var_two, var_three, 
        var_four): 
    print(var_one) 

# 다음과 같은 들여쓰기는 Hanging indent라고 부르며 level이 추가되어야 함
foo = long_function_name( 
    var_one, var_two, 
    var_three, var_four)
# 잘못된 예

# vertical로 정렬이 안되어있으면 첫째 줄에 arguments를 작성하면 안됨
foo = long_function_name(var_one, var_two, 
    var_three, var_four) 

# 들여쓰기를 구분할 수 없으므로 추가 들여쓰기가 필요
def long_function_name( 
    var_one, var_two, var_three, 
    var_four): 
    print(var_one)
  • if문을 작성할 경우 다음과 같은 style로 작성할 수 있다.
# 추가 들여쓰기가 없음
if (this_is_one_thing and 
    that_is_another_thing): 
    do_something()

# if 문과 구별할 수 있는 주석을 추가
if (this_is_one_thing and 
    that_is_another_thing): 
    # <주석>
    do_something() 
    
# if문이 연속되는 다음 줄에 추가 들여쓰기 추가
if (this_is_one_thing 
        or that_is_another_thing): 
    do_something()
  • 괄호의 경우 다음과 같이 정렬될 수 있다.
# 괄호는 마지막 줄의 첫 번째 문자로 정렬
my_list = [ 
    1, 2, 3, 
    4, 5, 6, 
    ] 
result = some_function_that_takes_arguments( 
    'a', 'b', 'c', 
    'd', 'e', 'f', 
    )

# 들여쓰기없이 줄의 첫 번째 문자로 정렬될 수 있음
my_list = [ 
    1, 2, 3, 
    4, 5, 6, 
] 
result = some_function_that_takes_arguments( 
    'a', 'b', 'c', 
    'd', 'e', 'f', 
)

탭 또는 공백

python은 들여쓰기를 위해 탭과 공백을 섞어서 사용하는 것을 허용하지 않는다.

 

최대 Line 길이

  • 모든 줄은 최대 79자로 제한
  • 긴 줄은 괄호를 감싸서 사용하는 것을 선호
  • 괄호로 감싼 긴 줄은 여러 줄로 나눌 수 있음
  • 다음과 같이 backslash를 사용할 수 있음
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())
  • assert문을 사용하는 경우도 있음

연산자 전후의 줄 바꿈

# 잘못된 예
# 연산자가 피연산자로부터 멀리 떨어져있음
income = (gross_wages +
          taxable_interest +
          (dividends - qualified_dividends) -
          ira_deduction -
          student_loan_interest)
          
# 올바른 예
# 연산자와 피연산자를 matching하기 쉬움
income = (gross_wages
          + taxable_interest
          + (dividends - qualified_dividends)
          - ira_deduction
          - student_loan_interest)

Blank Line

  • 함수와 클래스는 두 개의 빈 줄로 구분
  • 클래스 내의 메서드는 빈 줄 하나로 구분

Encoding

  • 항상 UTF-8을 사용
  • 비 UTF-8은 테스트 목적으로만 사용
  • 표준 라이브러리의 모든 식별자는 ASCII 전용 식별자, 영어 단어를 사용

Import

  • import는 일반적으로 별도의 줄을 사용
# 올바른 예
import os
import sys
from subprocess import Popen, PIPE

# 잘못된 예
import sys, os
  • import는 항상 파일 상단, 모듈 주석 및 docstring 바로 뒤, 모듈 전역, 상수 앞에 배치
  • 표준 라이브러리 > third party > local application/library 순서로 그룹화
  • 절대 import가 권장됨
# absolute import
import mypkg.sibling
from mypkg import sibling
from mypkg.sibling import example

# relative import
# absolute import를 사용할 때 너무 경로가 복잡할때 사용
from . import sibling
from .sibling import example
  • "from <module> import *"와 같은 와일드카드 import는 지양

Dunder Name

  • __all__, __author__, __version__ 등과 같은 "dunders"는 __future__ import를 제외한 모든 import문 앞에 위치
from __future__ import barry_as_FLUFL

__all__ = ['a', 'b', 'c']
__version__ = '0.1'
__author__ = 'Cardinal Biggles'

import os
import sys

 

[reference]

https://www.python.org/dev/peps/pep-0008/

728x90

'Python' 카테고리의 다른 글

[PEP8] Comments  (0) 2022.02.26
[PEP8] When to use trailing commas  (0) 2022.02.25
[PEP8] Whitespace in Expressions and Statements  (0) 2022.02.07
[PEP8] String Quotes  (0) 2022.02.07
한 번 사용하고 버려지는 Iterator 객체  (0) 2021.06.13