파이썬 변수명, 클래스명, 메소드명 마다 규칙이 있다.
코딩할 때, "예쁘게?"해야 협업할 때 , 관리할때 매우 유용하다.
- 규칙성없이 코드 작성하면 매번 다시 코드를 짜야할 수 있으니 명심
www.python.org/dev/peps/pep-0008/
규칙을 적용하지 않는 예외상황
- 규칙을 적용한 코드가 읽기 어려운 경우
- 일관성을 지키려고 한 수정이 다른 규칙을 어기는 경우
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
'Developing.. > Python' 카테고리의 다른 글
API tutorials in Python - REST API 중심으로 (0) | 2021.02.05 |
---|---|
Socket Programming in Python (Guide) (0) | 2021.02.05 |
markdown to html file (0) | 2021.01.31 |
[error] pyenv - Jupyter notebook 어떻게 사용하나? (0) | 2021.01.15 |
[error] pip install package가 outdate되어 있는 경우 (0) | 2021.01.14 |