티스토리 뷰

 파이썬 코드 스타일 가이드 _ PEP 8
  • 코드를 작성하는 것보다 읽는 양이 훨씬 많기 때문에 가독성이 중요하다.
 

PEP 8 – Style Guide for Python Code | peps.python.org

PEP 8 – Style Guide for Python Code Author Guido van Rossum , Barry Warsaw , Nick Coghlan Status Active Type Process Created 05-Jul-2001 Post-History 05-Jul-2001, 01-Aug-2013 Table of Contents This document gives coding conventions for the Python code co

peps.python.org

  

 

PEP 8 가이드는

    코드의 가독성을 향상하고 광범위한 파이썬(Python) 코드 스펙트럼에 일관성을 갖도록 하기 위함이다.

  

  

 

단 PEP 8 가이드를 무시할 수 있는 경우들이 있다.

  • 가이드 적용이 오히려 가독성을 떨어뜨릴 때(코드를 읽기 익숙한 사람조차 읽기 힘들 경우)
  • 규칙을 어기는 주변 코드들과 일관성을 유지하기 위해(추후 이 말이 이해될 때 기록)
  • 가이드라인 도입 이전에 작성된 코드이며 딱히 수정할 이유가 없는 경우
  • 코드와 스타일 가이드가 권장하는 지침을 지원하지 않는 이전 버전의 파이썬(Python)이 호환되어야 하는 경우

 

 

코드 레이아웃(Code Lay-out)
들여 쓰기(Indentation)
  • 들여 쓰기는 4개의 공백(스페이스)을 사용한다. (선택 사항)
  • Tap 사용은 이미 작성된 코드에서 들여 쓰기를 Tap으로 사용했을 경우만 사용한다. (일관성 유지)
  • Python3에서는 Tap과 Space를 혼용해서 쓰지 않도록 한다.

  

  

  • 코드를 여러 줄로 이어 쓰는 경우

            º 열린 괄호를 기준으로 수직 정렬(세로 맞춤)하는 방식

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)

 

            º 열린 괄호 밑으로 들여 쓰기 하는 방식 (선택 1. 들여 쓰기 공백 4칸)

foo = long_function_name(
    var_one, var_two,
    var_three, var_four)

 

            º 열린 괄호 밑으로 들여 쓰기 하는 방식 (선택2. 들여 쓰기 공백 2칸)

foo = long_function_name(
  var_one, var_two,
  var_three, var_four)

 

 

​==========

  • if() 문의 조건부를 길게 사용하여 여러 줄로 작성할 경우 (아래 방법 중 선택하여 사용)

            º  추가적인 들여 쓰기를 사용하지 않는 방식

if (this_is_one_thing and
    that_is_another_thing):
    do_something()

 

            º 구문 하이라이터(sysntax highlighter)를 지원하는 에디터일 경우 주석을 추가해 조건문과 나머지 코드를 구분하는 방식

if (this_is_one_thing and
    that_is_another_thing):
    # 두 조건이 만족하면 아래를 실행.
    do_something()

 

            º 아랫 줄에 표기된 조건부에 들여 쓰기를 추가하여 나머지 코드를 구분하는 방식

if (this_is_one_thing and
        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',
)

 

 


한 줄(Line)의 최대 길이
  • 코드 한 줄(Live) 당 최대 길이를 정하여 창 분할을 가능하게 하여 작업 환경을 최적화한다.
  • 모든 줄은 한 줄 당 최대 79자까지 적을 수 있다.
  • 줄 바꿈을 할 때 는 현 자료에서 설명하는 들여쓰기의 방식을 참조한다.
  • 독스 트링(Docstring), 주석(Comments)은 72자로 제한되어야 한다.

 

 

Docstring:

    모듈, 클래스, 함수, 메소드의 설명을 기재한 문서이다.

        자세한 작성법은 PEP 257 - 독스트링 규칙(Docstring Convention)을 참조하자.

 

 

 

            º 백슬래시(\)를 사용하여 줄 바꿈 하는 방식

from mypkg import example1, \
    example2, example3

 

 


연산자 위치
  • 가독성을 위하여 길게 늘어지는 경우 연산자와 피연산자를 구별하여 작성한다.

 

 

            º 연산자를 문장 시작부에 작성 하는 방식

income = (gross_wages
         + taxable_interest
          + (dividends - qualified_dividends)
          - ira_deduction
          - student_loan_interest)

 

 


공백 라인(Blank Lines)
  • 가독성을 크게 향상시킬수 있다.
  • 클래스 또는 함수간의 정의를 구분할 때 사용한다.
  • 연관성이 있는 코드끼리 분리 하는데(코드 내 연관성이 있는 코드 덩어리 묶는데) 사용한다.

 

 

            º 최상위 위치에 있는 함수와 클래스의 정의로 두 개의 공백 라인(줄바꿈)을 사용하는 방식

class MyFirstClass:
    pass


class MySecondClass:
    pass

 

            º 클래스 내부의 메서드 정의로 한 개의 공백 라인(줄바꿈)을 사용하여 구분하는 방식

class MyClass:
    def first_method(self):
        return None

    def second_method(self):
        return None

 

 


소스 파일 인코딩(Source File Encoding)
  • Python 배포 코드는 UTF-8을 사용해야 한다.  (별도의 인코딩을 사용 시 명시 할 것)
    • Python 2 에서는 ASCII를 사용한다.
  •  표준 라이브러리에서 UTF-8이 아닌 문자 인코딩은 테스트목적으로만 사용해야한다.
  • ASCII가 아닌 문자는 가급적 장소, 사람, 이름을 나타낼 때만 사용해야한다.
  • ASCII가 아닌 문자를 데이터로 사용하는 경우,  ( z̯̯͡a̧͎̺l̡͓̫g̹̲o̡̼̘ ) 와 같이 보기 힘든 유니코드 문자로 사용하지 말아야한다.
  • Python 표준 라이브러리의 모든 식별자는 ASCII 전용 식별자를 사용해야 한다.
  • 가능한 영어 단어로 사용해야한다. (그럼에도 불구하고 대부분 영어단어가 아닌 약어와 기술 용어가 사용됨)
  • 전 세계 사용자를 대상으로 하는 오픈 소스 프로젝트는 위와 같은 내용을 채택하는 것이 좋다.

 

 


라이브러리 가져오기(Imports)
  • import는 가장 맨 위에 선언해야한다.
  • 한줄에 한개의 Import를 권장한다.
  • from으로 동일한 곳에서 여러 모듈을 import할 때 한 줄로 사용할 수 있다.
  • import는 다음과 같은 순서로 그룹화 해야한다.
    • 작성중 ...

 

  • Imports are always put at the top of the file, just after any module comments and docstrings, and before module globals and constants.Imports should be grouped in the following order:
    1. Standard library imports.
    2. Related third party imports.
    3. Local application/library specific imports.
    You should put a blank line between each group of imports.
  • Absolute imports are recommended, as they are usually more readable and tend to be better behaved (or at least give better error messages) if the import system is incorrectly configured (such as when a directory inside a package ends up on sys.path):

However, explicit relative imports are an acceptable alternative to absolute imports, especially when dealing with complex package layouts where using absolute imports would be unnecessarily verbose:

 

 

import mypkg.sibling
from mypkg import sibling
from mypkg.sibling import example
from . import sibling
from .sibling import example
from myclass import MyClass
from foo.bar.yourclass import YourClass
import myclass
import foo.bar.yourclass

 

 

            º 한줄에 한개의 Import를 권장한다.

import os
import sys

            º from으로 동일한 곳에서 여러 모듈을 Import할 때 한 줄로 사용할 수 있다.

from subprocess import Popen, PIPE

 

 


모듈  (Module Level Dunder Names)
  • __모듈이름__  형대로 사용한다.

 

 

문자열 따옴표(String Quotes)
들여 쓰기(Indentation)
    • 들여 쓰기는 4개의 공백(스페이스)을 사용한다. (선택 사항)
    • Tap 사용은 이미 작성된 코드에서 들여 쓰기를 Tap으로 사용했을 경우만 사용한다. (일관성 유지)
    • Python3에서는 Tap과 Space를 혼용해서 쓰지 않도록 한다.

 

표현식 및 구문의 공백(Whitespace in Expressions and Statements)

*구문(Statements) : 컴퓨터에서, 원시 언어의 문장을 올바르게 구성하기 위한 규칙. 자연어의 문법에 해당한다.

????(Pet Peeves)
  • #
  • #
  • #

 

후행 쉼표를 사용하는 경우(When to Use Trailing Commas)
작성중입니다.
  • #
  • #
  • #

 

주석(Comments)
작성중입니다.
  • #
  • #
  • #

 

명명 규칙(Naming Conventions)
작업중입니다.
  • #
  • #
  • #

 

프로그래밍 권장사항(Progamming Recommendations)
작업중입니다.
  • #
  • #
  • #

 

 

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/06   »
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
글 보관함