[CS]PEP8이란?
PEP8 | style guide for Python code
1
2
$pip install pep8
$pep8 main.py
PEP8 위반 보고서 얻을 수 있음.
- 들여쓰기- 첫째 줄에 인자가 있으면 세로로 맞추어야 함.
- 첫째 줄에 인자가 없으면 들여쓰기로 다음행과 구별이 되도록 해야함.
- 괄호를 닫을 때는 마지막 줄이나 첫번째 줄에 맞추어 닫음.
 
- 탭 or 스페이트- 한 프로젝트 안에 섞어 쓰는 일은 피해야 함. 즉, 하나만 써서 들여쓰기 사용.
 
- 모든 줄은 79자 이내 권장.- 연산자로 인해 길어지는 경우 연산자 이전에 \(백슬래시) 사용으로 줄바꿈 하는 것이 좋음.
 
- 빈 줄(Blank line)- 최상위 클래스나 함수 정의 앞 뒤로 두 개의 공백줄 사용.
- 클래스 내 정의한 메소드들은 한 줄로 띄움.
 
- 파일 인코딩(file encoding)- UTF-8 권장.(UTF-8 사용 시 명시할 필요 없음)
 
- import- 파일의 맨위에 작성.
- Standard, 3rd party, local application의 분류로 정의하고, 빈 줄을 사용해 구분 되도록 작성.
- 절대경로 이용이 권장
- 한 줄에 두개 모듈 임포트는 바람직하지 않음.
- from으로 동일한 곳에서 여러 모듈을 불러올 때 한줄로 사용.
- Dunders Name(양쪽에 더블 언더스코어 사용)- docstring과 import 코드 사이에 위치하는 것을 권장.
 
 
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
31
32
33
34
35
  # 들여쓰기
  def my_function():
      if some_condition:
          do_something()
  # 한 줄의 최대 길이
  my_long_variable_name = some_long_function_name(argument1, argument2, argument3, argument4)
  # 여러 줄에 걸친 문장
  my_long_string = ('This is a long string that '
                    'spans multiple lines using '
                    'parentheses.')
  my_long_string = 'This is a long string that ' \
                  'spans multiple lines using ' \
                  'backslash.'
  # 함수와 클래스 사이에 빈 줄 추가
  class MyClass:
      pass
  def my_function():
      pass
  # 클래스 내부에서 메서드들 사이에 빈 줄 추가
  class MyClass:
      def method1(self):
          pass
      def method2(self):
          pass
  # 모듈 레벨 상수
  MY_CONSTANT = 10
- 문자열 쿼트(String Quotes)- ” 와 ‘ 구분은 따로 없으나 docstring에 사용할때는 “ 권장.
- Pet Peeves- 괄호에 붙은 코드는 띄울필요 없음 (abc[1], {abc: 2})
- , 와 닫는 괄호는 띄울 필요 없음 (0,)
- : 사이 띄울필요 없지만 수식이나 함수가 들어간 경우 양 옆의 공백이 동일하도록 띄움
- 변수 선언시 한칸씩만 띄우기. (y = 2, 세로 라인 맞춘다고 길게 하면 안좋음)
 
- Other recommendations- 다른 연산자 사용 시에도 우선 순위가 낮은 연산자 주위로 스페이스 한칸씩 넣어 구분 (xx + yy)
- function annotations 사용 시 : 와 -> 사용 시 스페이스를 넣어야함.
 def munge(input: AnyStr): …
 def munge() -> AnyStr: …
- function annotations 사용안하고 default value 설정시 = 사이를 띄우면 안됨.
- 코드 한줄에 한개의 명령문을 권장.
 
 
1
2
3
4
5
6
7
  # 문자열 쿼트
  my_string = "This is a string."
  my_string = 'This is also a string.'
  my_string = "This string contains the word 'quote'."
  my_string = 'This string contains the word "quote".'
  my_string = 'This string contains both \'single\' and "double" quotes.'
- 후행 쉼표(When to Use Trailing Commas)- Tuple 생성 시 넣어야함 (tuple = ‘abc’, )
- 후행 쉼표 사용 시 ‘나중에 추가가 있겠구나’라고 예상이 가능 - 1 2 3 4 5 6 7 - FILES = [ 'setup.cfg', 'tox.ini', ] initialize(FILES, error=True, ) 
 - 주석은 아예 없는 것보다 상이한것이 나쁘다. 즉, 최신상태로 유지를 항상 우선순위로 두자 
 완전한 문장으로 영문 작성시 첫글자는 대문자여야 함.
 문장들은 마침표로 끝맺어야함.
 주석들 마침표 뒤에는 2칸 공백 사용- 블록주석(Block Comments) - 뒤에오는 일부 코드에 적용되며, 해당 코드와 동일한 레벨로 들여쓰기가 되야한다.
- Inline Comments) - 코드의 문과 같은 줄에 있는 주석이고 최소 2칸 공백으로 구분, 꼭 필요한 경우만 사용
- Documentation Strings)- 모든 퍼블릭 모듈, 함수, 클래스 그리고 메서드들에 대해서 설명 작성.
- 한줄로 된 스트링은 같은 줄에 닫아야함.
 
 
1
2
3
4
5
6
7
8
9
10
11
  fruits = [
      'apple',
      'banana',
      'cherry',
  ]
  person = {
      'name': 'John',
      'age': 30,
      'city': 'New York',
  }
- 작명 규칙(Naming Conventions)- Python 작명 컨벤션은 좀 망쳐져 있어서 일관성 유지가 어렵다. 따라서 내부 라이브러리 일관성 유지가 우선. - (Overriding Principle)- _single_underscore : 약한 ‘내부 사용’ 지표(indicator)
- single_underscore_ : python keyword와의 충돌을 피하기 위해 관례로 사용.
- __double_underscore : 클래스 어트리뷰트의 이름을 지정할때, 네임 맹글링 호출(__boo - _class__boo)
- double_underscore : magic 객체 또는 어트리뷰트
 
- (Descriptive: Naming Styles)- lower : 모든 단어를 소문자로
- upper : 모든 단어를 대문자로
- snake_case : 단어 사이 언더 바(_)를 사용
 - Train_Case - 각 단어의 맨 앞글자를 대문자로 표기
 - spinal_case - 각 단어의 맨 앞글자를 소문자로 표기
- camelCase(lowerCamelCase) - 단어의 첫 글자를 대문자료 표기, 단 첫번째 단어의 첫글자는 소문자로 표기.
- PascalCase(UpperCamelCase) - 단어의 첫 글자를 대문자로 표기하는 표기법.
 
- (Prescriptive: Naming Conventions)- 패키지명과 모듈명(Package and Module Names) : 모두 소문자를 사용하여 짧게 지어야함
- 클래스명(Class Names) : CapWord 컨벤션(각 글자의 첫글자를 대문자로)을 따른다.
 
 - 1 2 3 4 5 6 7 8 9 10 11 12 13 14 - # 변수명, 함수명 my_variable = 10 def my_function(): pass # 클래스명 class MyClass: pass # 모듈명 import my_module # 상수 MY_CONSTANT = 10 
- (Overriding Principle)
- 프로그래밍 권장사항(Programming Recommendations)- None 같은 싱글톤 비교는 is, is not으로 이루어져야함.(등호 안됨)
- is not 보다 not … is 사용 권장.
- Exception 포착 시, except 절 보다 특정 예외 언급.
- return 문에 대한 일관성 유지. 반환문이 없는 곳은 ‘return None’ 으로 명시.
- 접두어, 접미어 확인시 문자열 슬리이싱 대신 str.startswith(), str.endswith() 사용.
- 오브젝트 타입 비교 시 isinstance(obj, basestring) 사용.
- sequence(문자열, 리스트, 튜플)에서 빈 시퀀스가 False라는 사실 이용.
- == 등호로 True 비교 하지말자. 
- 함수 어노테이션(Function Annotations)
- 변수 어노테이션(Variable Annotations)- 변수 어노테이션은 콜론 다음 한 칸 공백.
 
 - 1 2 3 4 5 6 7 8 - def greet(name: str) -> str: return 'Hello ' + name def repeat(item: str, times: int = 2) -> str: return item * times x: int = 5 y: str = 'hello' 
 This post is licensed under  CC BY 4.0  by the author.