Python 코딩 지침은 Python 코딩에 대한 검증된 지침, 규칙 및 모범 사례 집합입니다.
지침의 목적은 개발자가 Python을 효과적으로 사용하고 더 읽기 쉬운 최신 Python 스타일을 제공하도록 돕는 것입니다. 쉽게 유지 관리하고 확장할 수 있는 코드입니다. 또한 Python으로 애플리케이션이나 라이브러리를 개발할 때 따라야 할 개발 표준을 설정합니다.
이 문서가 Python을 시작하는 데에도 도움이 되기를 바랍니다. JavaScript와 같은 다른 스크립팅 언어에서 왔다면 Python이 매우 유사하다는 것을 알게 될 것이며 이 문서는 Python으로 전환하는 방법입니다.
지침은 일반적으로 PEP8 표준에 정의된 Python 언어에서 제공하는 모든 리소스에 중점을 둡니다. PEP8 여기 PEP8은 이 코딩 지침 제안의 기반으로 사용됩니다. 저는 더 읽기 쉽고 현대적인 Python 스타일을 장려하고 싶습니다.
귀하는 이 지침의 일부 규칙이 귀하의 기대와 상반되거나 심지어 귀하의 경험과 상반된다는 것을 알게 될 수도 있습니다.
어떤 식으로든 코딩 스타일을 바꾸라고 제안하지 않았다면 나는 실패한 것입니다!
이 지침의 규칙을 확인하거나 반증해 보십시오. 특히, 제안된 규칙 중 일부를 더 나은 예의 측정으로 뒷받침하고 싶습니다.
읽기 쉽고 유지 관리가 가능하며 확장 가능한 애플리케이션을 만드는 소프트웨어 개발의 일반적인 규칙입니다. 이것이 항상 진실은 아니지만 우리는 이 목표를 지향합니다.
코드 표준은 위에서 언급한 세 가지 원칙을 사용하여 애플리케이션 구축을 달성하는 데 도움이 되는 도구입니다. 일관된 개발 표준을 확립함으로써 제공되는 몇 가지 이점은 다음과 같습니다.
️ 경고: 이 문서는 지속적으로 개선되고 있는 살아있는 문서입니다. 개선을 위한 의견과 제안을 환영합니다. 우리의 이해가 향상되고 사용 가능한 라이브러리 세트의 언어가 발전함에 따라 이 문서를 수정하고 확장할 계획입니다.
이름 | 협약 | 코드 예 |
---|---|---|
단일 변수 이름 | 뱀 케이스 | age: int = 100 |
복합 변수 이름 | 뱀 케이스 | first_name: str = "Akira" |
상수 이름 | CONST | CPU: number = 8 |
복합 상수 이름 | CONST | MAX_NUMBER: number = 100 |
열거형 이름 | 파스칼케이스 | class Color(Enum): RED = 1 GREEN = 2 |
함수 이름 | 뱀 케이스 | def main() |
매개변수가 있는 함수 | 뱀 케이스 | def calculate(n1: int, n2: int) |
반환 유형이 있는 함수 | 뱀 케이스 | def calculate(n1: int, n2: int) -> int: |
복합 함수 이름 | 뱀 케이스 | def add_two_numbers(n1: int, n2: int) -> int: |
수업 이름 | 파스칼케이스 | class Base |
복합 클래스 이름 | 파스칼케이스 | class MyClass |
인터페이스 | 파스칼케이스 | class IUser(ABC) |
주조 | 기본 | age: int = int(100) |
목록 | 낙타 케이스 | myList: list[int] = [1,2,3] |
튜플 | 낙타 케이스 | myTuple: tuple[int] = (1,2,3) |
세트 | 뱀 케이스 | my_set: set[int] = {1,2,3} |
사전 | 뱀 케이스 | my_dictionary: dict = {"name": "John", "age": 100} |
여러 유형 힌트 | 뱀 케이스 | var_a: Union[int, str] |
우리는 읽고 이해하기 가장 쉬운 Python 문서용 Google Doc Style을 사용할 것을 제안했습니다. Google 스타일 가이드는 Python 커뮤니티에서도 매우 유명하고 널리 사용됩니다.
def add_binary ( a : int , b : int ) -> int :
"""
Returns the sum of two decimal numbers in binary format.
Parameters:
a (int): First number to add
b (int): Second number to add
Returns:
binary (int): Binary int of the sum of a and b
"""
binary_sum = bin ( a + b )[ 2 :]
return int ( binary_sum )
유형 힌트는 값 유형을 정적으로 표시하는 공식적인 솔루션입니다.
예:
def addBinary(a: int, b: int)-> int:
...
위의 이 함수에서는 함수가 변수 a
및 b
에서 int
값을 기다리고 int
값을 반환한다는 것이 명시되어 있습니다.
이 링크를 확인하세요: Python 타이핑 공식 문서
하지만 파이썬은 형식화되지 않은 언어가 아닌가요? 예, 그렇지 않습니다. int
와 다른 값을 전달하면 작동합니다.
Python에서 유형 일치를 확인하는 방법은 무엇입니까?
mypy
라이브러리를 사용해야 합니다.
Mypy는 동적(또는 "duck") 타이핑과 정적 타이핑의 이점을 결합하는 것을 목표로 하는 Python용 선택적 정적 유형 검사기입니다. (출처: 공식 문서)
pip install mypy
mypy mycode.py
Python에 linter를 사용하는 아이디어는 이 문서에서 제안된 코딩 지침을 시행하는 것입니다. 저는 Precommit을 사용하겠습니다.
pip install pre-commit
기본 구성:
.pre-commit-config.yml
파일을 만듭니다.아래 예에서 스크립트는 다음 단계를 실행합니다.
예:
repos:
- repo: https://github.com/pre-commit/pre-commit-hooks
rev: v2.3.0
hooks:
- id: check-yaml
- id: end-of-file-fixer
- id: trailing-whitespace
- id: check-json
- id: detect-private-key
- repo: https://github.com/PyCQA/isort
rev: 5.12.0
hooks:
- id: isort
- repo: https://github.com/psf/black
rev: 22.12.0
hooks:
- id: black
language_version: python3.10
- repo: https://github.com/charliermarsh/ruff-pre-commit
rev: 'v0.0.260'
hooks:
- id: ruff
pyproject.toml
파일을 만듭니다.예:
[tool.black]
line-length = 80
target-version = ['py310']
include = '.pyi?$'
[tool.isort]
line_length = 79
multi_line_output = 3
include_trailing_comma = true
force_grid_wrap = 0
use_parentheses = true
ensure_newline_before_comments = true
이 구성 후에는 커밋을 할 때마다 사전 커밋이 실행됩니다.
사전 커밋 공식 문서
테스트를 위해 제안된 프레임워크는 pytest입니다. 또한 매우 인기 있는 Python 테스트 프레임워크이기도 합니다.
tests
폴더 안으로 이동합니다. pytest
pytest --cov .
더 많은 pytest 명령을 보려면 여기에서 공식 문서를 따르세요. pytest
다음은 테스트에 대한 함수 정의의 예입니다.
아래 예에 설명된 대로 함수를 생성한 후:
다음 단계에 따라 단위 테스트를 만들 수 있습니다.
test_
포함됩니다.새로운 프로젝트를 시작하려면 다음 명령을 사용하여 프로젝트를 복제할 수 있습니다.
git clone https://github.com/rsaz/python-project-template
다음은 제안된 프로젝트 기본 구조입니다.
프로젝트 구조는 다음을 기반으로 합니다.
폴더/파일 | 설명 |
---|---|
유틸리티 | 환경을 생성, 활성화, 비활성화 및 삭제하고 종속성을 업데이트 및 생성할 수 있는 PowerShell 스크립트 |
.vscode | 편집기별 구성 |
소스 | 프로젝트 메인 소스 폴더 |
시험 | 모든 애플리케이션 단위 테스트가 포함된 폴더 |
벤브 | Python 가상 환경 |
.pylintrc | Python용 pylint 정적 코드 분석기 구성 파일 |
pytest.ini | pytest용 구성 파일 |
라이센스.txt | 프로젝트 라이선스 조건 |
읽어보기.md | 프로젝트 세부정보 |
요구사항.txt | 프로젝트 종속성 |
setup.cfg 및 setup.py | 프로젝트 초기 구성 |