[Pyhton] Python Convention (코딩규칙)
- 파이썬(Python)
- 2023. 3. 6. 00:37
참조
Python 코딩 규칙
- 파이썬의 좋은점 중 하나는 가독성입니다.
- 파이썬은 다른 언어로 작성된 코드 보다 훨씬 더 잘 읽힙니다.
- Pythonic하게 코드를 작성하면 이와 같은 장점을 극대화 시킬 수 있습니다.
- Pythonic이란 '파이썬다운' 이라는 의미로 파이썬 특유의 문법을 잘 활용하여 효율적이고 간결하게 코드를 작성하는 것을 가리킵니다.
- Pythonic한 방식을 통해 가독성을 높이고 유지보수도 쉽게 할 수 있습니다.
들여 쓰기
- 들여쓰기는 4개의 space 사용합니다.
- 괄호 안에 연속된 줄은 내어쓰기를 통해 세로로 정렬 해야 합니다.
- 괄호 안에 내어쓰기를 사용할 때 첫 번째 줄에는 인자가 없어야 합니다.
- 연속된 줄로 표현 하기 때문에 들여 쓰기를 사용해야 합니다.
- 기본적으로 space를 통해 들여쓰기를 사용합니다.
- 이미 탭으로 들여쓰기가 사용된 코드만 일관성을 위해 탭으로 들여쓰기를 합니다.
- 탭과 space가 혼용된 경우 space만 사용하도록 변환해야 합니다.
좋은 예
def long_function_name (
var_one, var_two, var_three,
var_four) :
나쁜 예
def long_function_name (var_one,
var_two, var_three,
var_four) :
한행의 최대 길이
- 모든 행은 최대 79자로 제한 합니다.
- Python 표준 라이브러리 행은 79자로 제한되어 있습니다.
- 여러 줄을 표현하는 가장 좋은 방법은 괄호를 통해 감싸는 방법 입니다.
- with 문과 같이 괄호를 통해 여러줄을 표현하지 못하는 경우
\
를 사용합니다.
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())
빈 줄
- 최 상위 수준 함수와 클래싀 정의는 두 줄을 띄워서 구분합니다.
- 클래스의 메서드 정의는 한줄을 띄워서 구분합니다.
import module
class A(object):
pass
class B(object):
pass
def main():
a = module.A()
return 0
...
인코딩
- 모든 식별자는 ASCII 문자로만 작성 가능합니다.
- 식별자는 영어만 사용하도록 합니다.
- 문자열 리터럴과 주석 반드시 ASCII 문자만 사용하도록 합니다.
- 테스트 목적으로 ASCII 문자 이외의 문자를 사용할 수 있습니다.
- 코드 저자 이름을 작성할 시 ASCII 문자 이외의 문자를 사용할 수 있습니다.
import
- import는 항상 코드 맨위에, 모듈 전역 상수 앞, 모듈 주석과 독 스트링뒤에 놓입니다.
- import 순서
- 표준 라이브러리
- 제 3 관련 부분
- Local application/library
- 일반적으로 import는 별도에 행에 있어야 합니다.
좋은 예
import os
import sys
from subprocess import Popen, PIPE
# 하나의 패키지에서 여러개의 모듈을 가져오는 경우 위와 같은 방식은 괜찮습니다.
나쁜 예
import sys,os
괄호
- 괄호, 중괄호 또는 대괄호 내부에서 불필요한 공백을 사용하지 않습니다.
- 괄호내 여러줄 구조를 갖는 경우 마지막 줄이 아닌 다음 줄에 닫는 괄호를 사용합니다.
- 후행 쉼표와 닫는 괄호 사이 불필요한 공백을 사용하지 않습니다.
- 함수호출에서 인수를 넣는 여는 괄호, 인덱싱 여는 괄호에서 불필요한 공백을 사용하지 않습니다.
좋은 예
my_list = [
1, 2, 3,
4, 5, 6,
]
spam(ham[1], {eggs: 2})
foo = (0,)
spam(1)
dct['key'] = list[index]
나쁜 예
my_list = [1, 2, 3,4, 5, 6,]
spam( ham [ 1 ], { eggs : 2} )
foo = (0, )
spam (1)
dct ['key'] = list [index]
명명 규칙
- 암시적인 것보다 명시적인 명명법이 좋습니다.
- 쉬운 코드를 작성하기 위해 가독성이 좋은 문자와 단어를 선택해야 합니다.
- 올바른 코드 스타일을 사용하는 만큼 이름 또한 신중하게 선택해야 합니다.
- Python에서 이름을 지정하는 가장 좋은 방법은 설명적인 이름을 사용하여 이름을 지정하는것 입니다.
- 단어를 약어로 사용하지 않으며 문자를 삭제하지 않아야 합니다.
- [-"Internal"-]은 모듈 내부 또는 클래스 내부에서 보호 및 비공개를 의미 합니다.
Type | Public | Internal | Examples |
---|---|---|---|
Packages | lower_with_under | pacakge, mypackage | |
Modules | lower_with_under | _lower_with_under | module.py, my_module.py |
Classes | CapWords | _CapWords | Model, MyClass |
Exceptions | CapWords | MyExceptionError | |
Functions | lower_with_under() | _lower_with_under() | function, my_function |
Local Variables | lower_with_under | x, var, my_variable | |
Global/Class Variables | lower_with_under | _lower_with_under | x, var, my_variable |
Global/Class Constants | CAPS_WITH_UNDER | _CAPS_WITH_UNDER | CONSTANT, MY_CONSTANT |
Instance Variables | lower_with_under | _lower_with_under (protected) | x, var, my_instance |
Method Names | lower_with_under() | _lower_with_under() (protected) | method, class_method |
Function/Method Parameters | lower_with_under | parameter, parameter_two |
Package & Module
- 패키지명은 소문자 단어를 사용합니다.
- 패키지에는 밑줄을 사용하지 않습니다.
- 모듈명은 소문자 단어를 사용하며 짧게 지정합니다.
- 모듈명에 여러 단어를 사용하는 경우
_
를 사용합니다.
from mypackage import my_module.py
Class
- 클래스 이름은 Camel case 방식을 사용합니다.
- Camel case 방식이란 단어 첫 문자 마다 대문자를 써서 연결하는 방식 입니다.
class MyClass: ...
Exception
- 예외는 클래스 명명 규칙과 동일 합니다.
- 예외가 실제 오류인 경우 예외 이름뒤에
Error
를 추가합니다.
except CumstomError as e:
..
Constant
- 상수는 일반적으로 모듈 수준에서 정의됩니다.
- 상수명은 모두 대문자로 작성합니다.
- 여러 단어를 사용할 경우
_
로 단어를 구분 합니다. - 상수명을
_
로 시작하여 외부 접근으로부터 보호할 수 있습니다.
MY_CONSTANT = 100
_PROTECTED_MY_CONSTANT = 100 # 모듈 내부에서만 사용하는 상수
Variables
- 소문자 단일 문자나 소문자 단어를 사용합니다.
- 여러 단어를 사용할 경우
_
로 단어를 구분 합니다. - global 변수명을
_
로 시작하여 외부 접근으로부터 보호할 수 있습니다.
my_variable = 100
global global_my_variable = 100 # 일반적인 global 변수 사용
global _global_my_variable = 100 # 모듈 내부에서만 사용하는 global 변수
Function & Method
- 함수명은 소문자 단어를 사용합니다.
- 여러 단어를 사용할 경우
_
로 단어를 구분 합니다. - 이미 Camel case 방식과 언더 스코어 방식이 혼용된 모듈에 한해서 같이 사용가능합니다.
private
메소드나private
함수명을_
로 시작하여 외부 접근으로부터 보호할 수 있습니다.
- 상속된 클래스의 메소드나 인스턴스 변수는
__
로 시작합니다.
def my_function():
...
def _protected_my_function():
# 모듈 내부에서만 사용하는 함수
...
Function & Method Parameter
- 함수 이름 규칙과 동일 합니다.
- 여러 단어를 사용할 경우
_
로 단어를 구분 합니다. - 메소드 첫번째 인자는 항상
self
입니다.
class Singer:
def sing(self, singer_name):
return "singer : "+singer_name
Instance Variables
- 소문자 단일 문자나 소문자 단어를 사용합니다.
- 여러 단어를 사용할 경우
_
로 단어를 구분 합니다. - 인스턴스 변수명을
_
로 시작하여 외부 접근으로부터 보호할 수 있습니다.
MyClass = my_instance()
MyClass = _protected_my_instance()
728x90
'파이썬(Python)' 카테고리의 다른 글
[Python] Dictionary, List Json 파일 만들기 (0) | 2023.03.08 |
---|---|
[Python] Python gRPC 상품 예제 (0) | 2023.02.23 |
[Python] Python gRPC RPC 패턴 (0) | 2023.02.22 |
[Python] 파이썬 - 공백 구분하여 입력받기 (0) | 2023.02.22 |
[Python] 파이썬 도커 파일 및 이미지 만들기 (0) | 2022.04.05 |
이 글을 공유하기