Featured image of post PEP 8スタイルガイドに従おう - Effective Python 項目2

PEP 8スタイルガイドに従おう - Effective Python 項目2

これはなに Link to this heading

Effective Python 第2版 、項目2「PEP 8スタイルガイドに従う」のまとめ。

ポイント Link to this heading

  1. 常にPEP 8スタイルガイドに従ってPythonコードを書こう
  2. 大きなコミュニティの共通スタイルを共有すれば、協働作業がはかどる
  3. 一貫したスタイルは、後の修正しやすさにつながる

PEP 8とは Link to this heading

PEP 8とは、Python拡張提案(Python Enhancement Proposal)の8番目の文章である。これは、Pythonのコードをどのようにフォーマットするかのスタイルガイドである。明確なPythonコードの書き方に関する詳細な説明が豊富に記されている。

PEP 8は下記のリンクから読める。これはPython言語の進化とともに継続的に更新されている。

<meta property="og:title" content='PEP 8 – Style Guide for Python Code | peps.python.org'>'s image

<meta property="og:title" content='PEP 8 – Style Guide for Python Code | peps.python.org'>

This document gives coding conventions for the Python code comprising the standard library in the main Python distribution. Please see the companion informational PEP describing style guidelines for the C code in the C implementation of Python.

peps.python.org

スタイルガイドの必要性 Link to this heading

Pythonのコードは正しい構文であればどのように書いてもよいが、一貫したスタイルに従うと下記の利点がある。

  • コードがより扱いやすく、より読みやすくなる
  • 他のPythonプログラマと共通のスタイルを分かち合うことで、プロジェクトでの協働作業がはかどる
  • コードを読む人が自分以外にいなくても、後の変更作業が容易になる

従うべき主なルール Link to this heading

空白 Link to this heading

  • インデントは空白4個
  • 1行79文字以下
  • 長い式を改行する場合は1つインデントする
  • 関数とクラスは2行空ける、クラス内メソッドは1行空ける
  • 辞書
    • キーとコロンの間はスペースを空けない
    • 同じ行に値を書く場合は、値の前に空白を1つ空ける
  • 変数代入の前後には空白を1つ空ける、2つ以上空けない
  • 型ヒント(型アノテーション)
    • 変数名の直後にコロンを置く
    • 型情報の前に空白を1つ置く

名前付け Link to this heading

対象名前付けルール
関数、変数、属性lower_snake_caselowercase_underscore
protected属性アンダースコアを1つ先頭につける_leading_underscore
private属性アンダースコアを2つ先頭につける__double_underscore
クラス、例外UpperCamelCaseCapitalizedWord
モジュールでの定数UPPER_SNAKE_CASEALL_CAPS
  • クラスのインスタンスメソッドでは、第一引数の名前にselfを使う
  • クラスメソッドは、第一引数の名前にclsを使う

式と文 Link to this heading

Pythonでimport thisを実行すると、「The Zen of Python」が表示される。これは、Pythonプログラマの心構えを簡潔に記したものである。

「The Zen of Python」には「明らかなやり方が1つ、できれば1つだけあるのがいい」という下記の記述がある。

There should be one– and preferably only one –obvious way to do it.

PEP 8では、これを式と文のガイダンスで実現している。

  • 式の否定(if not a is b)ではなく内側の項の否定(if a is not b)を使う
  • 空値の判定はif not somelistを使う
    • 空値が暗黙にFalseと評価されることを使う
    • コンテナやシーケンスの長さ(lf len(somelist) == 0)で空値([], '')を判定しない
  • 非空値の判定はif somelistを使う
    • 非空値について、if somelistは暗黙にTrueと評価される
  • if文、for文、while文、except複合文を1行で書かない
  • 式が1行に収まらない場合は、括弧でくくり複数行にして、読みやすくインデントする
    • \で行分けするより、括弧を使って複数の式を囲むほうが良い

インポート Link to this heading

  • import文は常にファイルの先頭に置く
  • インポートするときは常にモジュールの絶対名を使う
    • 現モジュールのパスからの相対名は使わない
  • 相対インポートを使わなければならない場合は、明示的な構文from . import fooを使う
  • インポートは①標準ライブラリ、②サードパーティー、③自作モジュール、の順に行う
    • それぞれの部分はアルファベット順にインポートする

PEP 8に従っているか確認する Link to this heading

PythonにはLinter(e.g. pylint, flake8)がある。これらは、自動でPEP 8スタイルガイドに沿っているか確認して、かつ、Pythonプログラムでよく見られる他の種類のエラーを検出する。また、多くのエディタやIDEにも同様の機能がある。

参考文献・URL Link to this heading

Effective Python 第2版's image

Effective Python 第2版

www.oreilly.co.jp
<meta property="og:title" content='PEP 8 – Style Guide for Python Code | peps.python.org'>'s image

<meta property="og:title" content='PEP 8 – Style Guide for Python Code | peps.python.org'>

This document gives coding conventions for the Python code comprising the standard library in the main Python distribution. Please see the companion informational PEP describing style guidelines for the C code in the C implementation of Python.

peps.python.org
Licensed under CC BY-NC-SA 4.0
最終更新 11月 01, 2023
Hugo で構築されています。
テーマ StackJimmy によって設計されています。