Python コーディング ガイドラインは、Python でのコーディングに関する実証済みのガイドライン、ルール、ベスト プラクティスのセットです。
このガイドラインの目的は、開発者が Python を効果的に使用できるようにし、より読みやすい最新の Python スタイルを提供することです。メンテナンスと拡張が容易なコード。また、Python でアプリケーションやライブラリを開発する際に従うべき開発標準を確立します。
このドキュメントが Python を始めるのに役立つことを願っています。 JavaScript などの別のスクリプト言語を使用している場合は、Python が非常によく似ており、このドキュメントは Python に移行する方法であることがわかります。
このガイドラインは、通常 PEP8 標準で定義されている Python 言語によって提供されるすべてのリソースに焦点を当てています。 PEP8 ここでの PEP8 は、このコーディング ガイドライン提案のベースとしてのみ使用されます。より読みやすく、最新の Python スタイルを推進したいと考えています。
このガイドラインの規則の中には、あなたの期待に反したり、経験に反したりするものもあるかもしれません。
何らかの方法でコーディング スタイルを変更することを提案しなかったら、私は失敗したことになります。
このガイドラインのルールを検証または反証してください。特に、提案されているルールの一部を、測定やより良い例で裏付けてもらいたいと強く思っています。
読み取り可能、保守可能、スケーラブルなアプリケーションを作成するというソフトウェア開発の一般的なルールです。これは必ずしも真実ではありませんが、私たちはこの目標を目指しています。
コード標準は、上記の 3 つの原則に基づいたアプリケーションの構築を実現するのに役立つツールです。一貫した開発標準を確立することで得られる利点の一部を次に示します。
️ 警告:これは継続的に改善が行われている生きたドキュメントです。改善のためのコメントや提案は大歓迎です。私たちの理解が向上し、利用可能なライブラリのセットの言語が進化するにつれて、このドキュメントを修正および拡張する予定です。
名前 | 大会 | コード例 |
---|---|---|
単一の変数名 | ヘビの場合 | age: int = 100 |
複合変数名 | ヘビの場合 | first_name: str = "Akira" |
定数名 | 定数 | CPU: number = 8 |
複合定数名 | 定数 | 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 タイピング公式ドキュメント
しかし、Pythonは型なし言語ではないでしょうか?はい、そうではありません。 int
とは異なる値を渡しても機能します。
Pythonで型ヒットを確認するにはどうすればよいですか?
mypy
ライブラリを使用する必要があります。
Mypy は、動的 (または「アヒル」) 型付けと静的型付けの利点を組み合わせることを目的とした Python 用のオプションの静的型チェッカーです。 (出典: 公式ドキュメント)
pip install mypy
mypy mycode.py
Python にリンターを使用するという考えは、このドキュメントで提案されているコーディング ガイドラインを強制することです。プレコミットを使用します。
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 コマンドの詳細については、こちらの公式ドキュメントに従ってください。
テスト用の関数定義の例を次に示します。
以下の例に示すように関数を作成した後、次のようになります。
次の手順に従って単体テストを作成できます。
test_
含まれます。新しいプロジェクトを開始するには、次のコマンドを使用してプロジェクトのクローンを作成します。
git clone https://github.com/rsaz/python-project-template
以下は、プロジェクトのデフォルト構造案です。
プロジェクトの構造は以下に基づいています。
フォルダー/ファイル | 説明 |
---|---|
ユーティリティ | 環境の作成、アクティブ化、非アクティブ化、削除、および依存関係の更新と作成を可能にする PowerShell スクリプト |
.vscode | エディター固有の構成 |
送信元 | プロジェクトのメインソースフォルダー |
テスト | すべてのアプリケーション単体テストが含まれるフォルダー |
ベンヴ | Python仮想環境 |
.pylintrc | Python 用の pylint 静的コード アナライザーの構成ファイル |
pytest.ini | pytest用の設定ファイル |
ライセンス.txt | プロジェクトのライセンス条項 |
README.md | プロジェクトの詳細 |
要件.txt | プロジェクトの依存関係 |
setup.cfg と setup.py | プロジェクトの初期構成 |