본문 바로가기
Developing../Python

PEP 8 -- Style Guide & Structure

by bents 2021. 2. 5.

파이썬 변수명, 클래스명, 메소드명 마다 규칙이 있다.

코딩할 때, "예쁘게?"해야 협업할 때 , 관리할때 매우 유용하다.

- 규칙성없이 코드 작성하면 매번 다시 코드를 짜야할 수 있으니 명심

 

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

 

PEP 8 -- Style Guide for Python Code

The official home of the Python Programming Language

www.python.org

한국어 요약 블로그

규칙을 적용하지 않는 예외상황

  1. 규칙을 적용한 코드가 읽기 어려운 경우
  2. 일관성을 지키려고 한 수정이 다른 규칙을 어기는 경우

Naming Convention 

# 변수명에서 _(밑줄)은 위치에 따라 의미가 다름.

  • _single_leading_underscore: 내부에서 사용하는 변수
  • single_trailing_underscore_: 파이썬 기본 키워드(위의 변수)와 충돌방지
  • __double_leading_underscore: 클래스 속성으로 사용되면 그 이름을 변경합니다.
    (ex. FooBar에 정의된 __boo는 _FooBar__boo로 바뀝니다.)
  • __double_leading_and_trailing_underscore__: 마술(magic)함수 또는 사용자가 조정할 수 있는 네임스페이스 안의 속성.
    *But 이런 이름을 새로 만들지 마시고 오직 문서대로만 사용하세요.
  • 소문자 L, 대문자 O, 대문자 I는 변수명으로 사용하지 마세요. *가독성 낮음

모듈(Module) 명은 짧은 소문자과 밑줄 

  • 모듈은 파이썬 파일(.py)에 대응하기 때문에 파일 시스템의 영향을 받으니 주의하세요.
  • C/C++ 확장 모듈은 밑줄로 시작합니다.****

# 클래스 명은 카멜케이스(CamelCase)로 작성.

  • 내부적으로 쓰이면 밑줄을 앞에 붙입니다.
  • 예외(Exception)는 실제로 에러인 경우엔 “Error”를 뒤에 붙입니다.
  • 서브클래스(자식클래스sub-class)의 이름충돌 방지용으로 밑줄 2개를 앞에 붙임.

# 함수명은 소문자와 밑줄로 작성.

  • 대소문자 혼용은 이미 흔하게 사용되는 부분에 대해서만 하위호환을 위해 허용합니다.
  • 인스턴스 메소드의 첫 번째 인자는 언제나 self입니다.
  • 클래스 메소드의 첫 번째 인자는 언제나 cls입니다.
  • 메소드명은 함수명과 같으나 비공개(non-public) 메소드, 혹은 변수면 밑줄을 앞에 붙입니다.

#상수(Constant)는 모듈 단위에서만 정의하며 모두 대문자와 밑줄로 작성.

Programming recommendation

# 비교하기

  • 객체타입을 비교할 때는 isinstance()를 사용합니다.
  • None을 비교할때는 is나 is not만 사용합니다.
  • 불린형(boolean)의 값을 조건문에서 ==를 통해 비교하지 마세요.
    : 그냥 값을 넣으면 된다. True면 조건문이 실행되도록 값을 넣으면 됨
    • 빈 시퀀스(string, list, tuple)는 조건문에서 거짓(false)입니다.

# 문장열 다루기

  • string 모듈보다는 string 메소드를 사용합니다. 
    메소드는 모듈보다 더 빠르고, 유니코드 문자열과 같은 API를 공유합니다.
  • 접두사/접미사를 검사할 때는 startswith()와 endwith()를 사용합니다.

 

# 예외처리

  • 클래스 기반의 예외를 사용하세요.
  • 모듈이나 패키지에 자기 도메인에 특화된(domain-specific)한 기반 예외 클래스(base exception class)를 빌트인(built-in)된 예외를 서브클래싱해 정의하는게 좋습니다. 이 때 클래스는 항상 문서화 문자열을 포함해야 합니다.
class MessageError(Exception): 
	"""Base class for errors in the email package."""
  • raise ValueError('message')가  raise ValueError, 'message'보다 낫습니다.
  • 예외를 except:로 잡기보단 명확한 예외를 명시하기.(ex. except ImportError:)
  • try: 블록은 필수적인 코드만 최소한으로 작성하기.

# 추가자료

realpython.com/python-program-structure/#python-statements

 

Python Program Lexical Structure – Real Python

In this tutorial you'll dig deeper into Python's lexical structure and start arranging code into more complex groupings. You'll learn about the syntactic elements that comprise statements, the basic units that make up a Python program.

realpython.com