【Python】コードの記述方法(PEP8に準拠したコーディング規約)【プログラミング入門】-Introduction for beginners-

【Python】コードの記述方法(PEP8に準拠したコーディング規約)【プログラミング入門】-Introduction for beginners-

この記事では、Pythonのコーディング規約であるPEP8に従ったコードの書き方について説明していきます。

Pythonのコードは、基本的に構文が正しい限り自由に書くことができます。しかし、読みやすく美しいコードを書きたい、他のプログラマーと協力してコードを開発したり、共有したりする場合には、PEP8というスタイルガイドに従うことがおすすめです。

この記事では、PEP8に記載されている規則の中から重要な部分を解説します。記事を通じて、以下の内容を学ぶことができます。

PythonのPEP8とは

PEP8(Python Enhancement Proposal #8)は、Pythonでのコード記述のためのガイドラインで、コーディング規約とも呼ばれます。

コーディング規約は、プログラマーがプログラムコードを記述する際に従うべきルールや規則のことです。PEP8に従うことは必須ではありませんが、PEP8に従うことでいくつかのメリットが得られます:

  • コードの可読性が向上します。
  • 他のPythonプログラマーと同じスタイルでコードを記述できます。
  • 他のPythonプログラムが理解しやすくなります。
  • コードの変更やメンテナンス作業が容易になります。


基本的に、PEP8に従ってコードを記述することをお勧めします。特にチームで協力してプロジェクトを進行している場合、チーム全体が同じスタイルでコードを書くことは重要です。もちろん、プロジェクト独自の規則が存在する場合は、それに従うべきです。

PEP8には多くのコーディング規約が記載されていますが、この記事では重要な部分に焦点を当てて解説します。具体的には、レイアウト、式と文、インポート、命名規則について詳しく説明します。

PythonのPEP8のレイアウト

インデント

Pythonでは、インデントがブロックの一部を表します。

C言語では波かっこを使用しますが、Pythonではインデントでブロックを示します。

例えば、Pythonのif文を見てみましょう。

        
if x > y:
    print('x > y')
else:
    print('x < y')
        
    

このように、正しいインデントが重要であり、規約ではタブではなく空白を使い、インデントには通常4つの空白を使うことが推奨されています。

改行後のインデント

Pythonでは、改行は文の終わりを示します。

C言語やJavaではセミコロンが文の終了を示したため、これらの言語に慣れている人々がPythonでの改行の扱いを誤解することがあります。

ただし、Pythonでも文の途中で改行が許容される場合があります。特に、括弧を使用してブロックが明示的に区切られている場合です。

文の途中で改行する場合、インデントの方法には2つの主なスタイルがあります。

1. 開始区切り文字(括弧など)に合わせて改行し、インデントを続けるスタイル。

        
def function(first_name, last_name,
        age, address):
    return first_name
        
    

2. 開始区切り文字の直後で改行し、1つのインデントを追加するスタイル。

        
def function(
        first_name, last_name,
        age, address):
    return first_name
        
    

注意点: 引数とコードのインデントが合致しないように、引数部分にはさらに1つのインデント(4つの空白)を追加します。

したがって、次のようなスタイルはPEP8に違反します。

        
# 区切り文字の直後に引数を指定する場合、改行後は区切り文字に合わせる
person = function(office, five,
    54, Japan)

# 引数のインデントをもう一つ深くする
def function(
    first_name, last_name,
    age, address):
    return first_name
        
    

リストの場合、以下のどちらの記述方法でも問題ありません。

        
list1 = [
    1, 2, 3,
    4, 5, 6,
]

list2 = [
    1, 2, 3,
    4, 5, 6,
]
        
    

1行の長さ


PEP8における1行の文字数に関するガイドラインについて説明します。PEP8では、1行の文字数を80文字以下に制限することが推奨されています。ただし、1行が80文字を超える場合には、最大で120文字まで拡張することも許容されています。

PEP8によれば、Pythonのコードで1行の文字数は80文字以下が望ましいです。これは以下の理由から重要です。

  • 可読性が向上する
  • コードの印刷時に収まりやすくなる
  • コードの比較が容易になる

ただし、PEP8は長い行を120文字まで許容しており、特定の状況では長い行を使うことができます。

このHTMLコードは、PEP8における1行の文字数に関するガイドラインについて説明するものです。HTML文書内でも、可読性や印刷時のレイアウトを考慮して適切な行の文字数を保つことが重要です。PEP8の原則をHTMLコードにも適用することで、コードの理解やメンテナンスがしやすくなります。

空白行

PEP8における空白行の使用について説明しながら、コードの例を示します。PEP8は、コード内の空白行に関するいくつかのルールを提供しています。以下のコード例を通じて説明します。


# インポート文の前に空白行を入れる(PEP8に違反)
import math
import time

# 関数の定義前に空白行を入れる(PEP8に違反)
def calculate_square(x):
    return x * x

# 関数の後に空白行を入れる(PEP8に準拠)
def calculate_cube(x):
    return x * x * x

# クラスの定義前に空白行を入れる(PEP8に違反)
class MyRectangle:
    def __init__(self, length, width):
        self.length = length
        self.width = width

# クラスの後に空白行を入れる(PEP8に準拠)
class MyCircle:
    def __init__(self, radius):
        self.radius = radius

# コードの最後には空白行を入れる(PEP8に準拠)

このコード例では、PEP8に準拠するための空白行の使用ルールを示しています。

  • インポート文の前に空白行を入れない: インポート文の前に空白行を入れることはPEP8に違反です。インポート文は連続して書くべきです。
  • 関数の定義前に空白行を入れない: 関数の前に空白行を入れることもPEP8に違反です。関数間には通常、1つの空白行を挟みます。
  • 関数の後に空白行を入れる: 関数定義の後には空白行を挿入し、次のコードブロックとの区切りを明示します。
  • クラスの定義前に空白行を入れない: クラスの前に空白行を入れることはPEP8に違反です。クラス間には通常、1つの空白行を挿入します。
  • クラスの後に空白行を入れる: クラス定義の後には空白行を挿入し、次のコードブロックとの区切りを明示します。
  • コードの最後には空白行を入れる: コードファイルの最後には空白行を挿入し、ファイルの終了を示します。

PEP8に従って空白行を適切に配置することで、コードが整理され、可読性が向上し、コードブロック間の区別が明確になります。

PythonのPEP8の式と文の記述

演算子

PEP8はPythonのコーディング規約で、演算子の使用方法についてもルールを提供しています。以下はPEP8に基づく演算子の記述ルールです。

  • 二項演算子の前後に空白を入れる: 二項演算子(+、-、*、/ など)の前後にスペースを1つ入れます。これによりコードが読みやすくなります。
  • 代入演算子の前後に空白を入れる: 代入演算子(=、+=、-= など)の前後にスペースを1つ入れます。これも可読性向上に貢献します。
  • 比較演算子の前後に空白を入れる: 比較演算子(==、!=、<、> など)の前後にスペースを1つ入れます。これで条件文が見やすくなります。
  • 論理演算子の前後に空白を入れる: 論理演算子(and、or、not など)の前後にスペースを1つ入れます。これがコードの可読性を高めます。
  • 優先順位を示すために括弧を使用: 演算子の優先順位が不明確な場合、括弧を使用して優先順位を明示的に指定します。これは誤解を避けるのに役立ちます。

コードの例


# 二項演算子
result = x + y

# 代入演算子
total_count += new_count

# 比較演算子
if age == 18:
    print("成人です")

# 論理演算子
if is_valid and not is_expired:
    print("有効です")

# 優先順位を示すための括弧
result = (x + y) * z

    

PEP8に従って演算子を適切に記述することで、Pythonコードの可読性が向上し、コードの品質が向上します。

PEP8はPythonのコーディング規約で、括弧、ブランケット、波括弧の使用方法についてもルールを提供しています。以下はPEP8に基づく記述ルールです。

括弧

  • 括弧の前後にスペースを入れる: 括弧(丸括弧、角括弧)の前後にスペースを1つずつ入れます。
  • 複数行の括弧を整列させる: 長い式や引数リストを複数行に分ける場合、括弧内の項目は整列させます。通常、括弧の開き括弧の位置に合わせて整列します。
  • 複数行の括弧を折り返す: 長い括弧内の項目が画面幅に収まらない場合、適切な位置で折り返します。折り返しの位置は、通常は括弧の開き括弧に合わせます。

ブランケット

  • ブランケット(角括弧、角かっこ)を使用する際には、括弧と同様に前後にスペースを入れる: ブランケットを使用する場合、ブランケットの前後にスペースを1つずつ入れます。

波括弧

  • 関数や制御構造(if、for、whileなど)内の波括弧(波かっこ、中括弧)を使用する場合、括弧の前に空白を入れず、括弧の後に空白を入れる: 関数や制御構造内で波括弧を使用する場合、波括弧の前に空白を入れません。しかし、波括弧の後にはスペースを1つ入れます。
  • 複数行のコードブロックをインデント: 波括弧を使用して複数行のコードブロックを作成する場合、各行をインデントし、ブロックの始まりを示します。

コードの例


# 括弧
result = add_numbers(3, 5)
values = [1, 2, 3,
          4, 5, 6]

# ブランケット
my_list = [10, 20, 30]
dictionary = {"key": "value"}

# 波括弧
if condition:
    print("条件がTrue")
    print("追加のコード")

    

PEP8の括弧、ブランケット、波括弧の記述ルールを遵守することで、Pythonコードが一貫性があり、読みやすくなり、コーディングスタイルが向上します。

PEP8はPythonのコーディング規約で、括弧、コロン、セミコロンの使用方法についてもルールを提供しています。以下はPEP8に基づく記述ルールです。

カンマ

  • カンマの後にスペースを入れる: カンマを使用する際、カンマの後にスペースを1つ入れます。
  • 長い行を折り返す場合、カンマは行末に置く: 長い行を複数行に分ける場合、カンマは行末に置きます。これにより、行が折り返されたことがわかりやすくなります。

コロン

  • コロンの前にスペースを入れず、コロンの後にスペースを1つ入れる: コロンを使用する際、コロンの前にはスペースを入れず、コロンの後にスペースを1つ入れます。これは関数や制御構造内でのコロンに適用されます。

セミコロン

  • セミコロンの前にスペースを入れず、セミコロンの後にスペースを1つ入れる: セミコロンを使用する場合、セミコロンの前にはスペースを入れず、セミコロンの後にスペースを1つ入れます。ただし、セミコロンはPythonではあまり一般的ではなく、できる限り避けることが推奨されます。

コードの例


# カンマ
numbers = [1, 2, 3, 4, 5]
coordinates = (12.345, 67.890)

# コロン
if condition:
    print("条件がTrue")
    print("追加のコード")

# セミコロン(注意: Pythonではあまり使われません)
statement1 = "Hello"; statement2 = "World"

    

PEP8のカンマ、コロン、セミコロンの記述ルールを遵守することで、Pythonコードが一貫性があり、読みやすくなり、コーディングスタイルが向上します。ただし、Pythonでは通常セミコロンを使用しないため、注意が必要です。

PEP8はPythonのコーディング規約で、式の否定に関する記述ルールも提供しています。以下はPEP8に基づく記述ルールです。

  • 否定を記述する際には「not」を使う: 式を否定する場合、キーワード「not」を使います。否定は「not」を使って明示的に行います。
  • 否定の後にスペースを入れず、式の前後にスペースを1つ入れる: 否定を記述する場合、「not」の後にスペースを入れず、式の前後にスペースを1つずつ入れます。

コードの例


# 否定の記述
if not condition:
    print("条件がFalse")

# 式の前後にスペースを入れる
result = some_value == 5
if not result:
    print("resultはFalse")

    

PEP8の式の否定の記述ルールを遵守することで、Pythonコードが一貫性があり、読みやすくなり、コーディングスタイルが向上します。否定を「not」を使って明示的に記述することは、コードの理解を助けます。

PEP8はPythonのコーディング規約で、空値(None)のチェックに関する記述ルールも提供しています。以下はPEP8に基づく記述ルールです。

  • 空値をチェックする際には「is None」を使う: 空値(None)をチェックする場合、「is None」という比較演算子を使用します。
  • 「is None」の前後にスペースを1つ入れる: 比較演算子「is None」の前後にスペースを1つずつ入れます。
  • 否定の場合は「is not None」を使う: 空値がでないことをチェックする場合、「is not None」という比較演算子を使用します。

コードの例


# 空値のチェック
value = None
if value is None:
    print("valueは空です")

# 否定の場合
result = some_function()
if result is not None:
    print("resultは空値でない")

    

PEP8の空値のチェックの記述ルールを守ることで、Pythonコードの一貫性があり、読みやすくなります。また、空値のチェックが明示的に行われ、コードの品質が向上します。

PEP8におけるブール値の確認の記述ルール

PEP8はPythonのコーディング規約で、ブール値の確認に関する記述ルールも提供しています。以下はPEP8に基づく記述ルールです。

  • 真偽値をチェックする際には明示的な条件を使う: ブール値(TrueまたはFalse)をチェックする場合、条件式を使用して明示的に評価します。
  • 真偽値のチェック条件は単純な変数の真偽値を利用する: 真偽値をチェックする際、条件式は単純な変数自体の真偽値を評価します。
  • 真偽値の比較時には「==」を使用せず、直接条件を評価する: 真偽値を比較する際、「==」を使用せず、条件そのものを直接評価します。

コードの例


# 真偽値の確認
is_valid = True
if is_valid:
    print("is_validはTrueです")

# 偽の場合
is_empty = False
if not is_empty:
    print("is_emptyはFalseではありません")

    

PEP8のブール値の確認の記述ルールを守ることで、Pythonコードが明示的で読みやすくなります。また、不要な比較演算子の使用を避け、コードの品質が向上します。

PEP8におけるインポートの記述ルール

PEP8はPythonのコーディング規約で、インポート文に関する記述ルールも提供しています。以下はPEP8に基づく記述ルールです。

  • 標準ライブラリモジュール: インポートするモジュールがPythonの標準ライブラリに含まれる場合、その次に、関連モジュール、ローカルモジュールをインポートします。
  • 関連モジュール: 関連モジュールはサードパーティモジュールや外部ライブラリで、次にインポートします。
  • ローカルモジュール: 最後に、ローカルモジュールをインポートします。これらは現在のプロジェクト内のカスタムモジュールです。
  • 各セクション内でアルファベット順: 各モジュールのセクション内で、インポート文はアルファベット順になるように並べます。

コードの例


# 標準ライブラリモジュール
import os
import sys

# 関連モジュール
import numpy as np
import pandas as pd

# ローカルモジュール
from mymodule import my_function
from mypackage import my_module

    

PEP8のインポートの記述ルールを守ることで、Pythonコードが整然とし、読みやすくなります。また、モジュールのインポート順序やアルファベット順に従うことで、コードの保守性が向上し、共同作業が容易になります。

PEP8における命名規則の記述ルール

PEP8はPythonのコーディング規約で、変数、関数、クラス、モジュールなどの識別子の命名に関する記述ルールも提供しています。以下はPEP8に基づく命名規則の概要です。

一般的な命名規則

  • 変数名: 小文字の単語または単語間をアンダースコアで区切ります。例: my_variable
  • 関数名: 変数名と同様に小文字の単語または単語間をアンダースコアで区切ります。例: my_function
  • クラス名: キャメルケース(単語の先頭を大文字にして連結)を使用します。例: MyClass
  • モジュール名: 小文字の単語または単語間をアンダースコアで区切ります。例: my_module

特定の命名規則

  • 定数: 全ての文字を大文字で表記し、単語間をアンダースコアで区切ります。例: MY_CONSTANT
  • プライベート(非公開)変数: 変数名の先頭にアンダースコアを付けます。例: _private_variable

コードの例


# 変数名
my_variable = 42

# 関数名
def my_function(param1, param2):
    return param1 + param2

# クラス名
class MyClass:
    def __init__(self):
        self.value = 0

# モジュール名
import my_module

# 定数
MY_CONSTANT = 3.14159

# プライベート変数
_private_variable = "This is private"

    

PEP8の命名規則を遵守することは、Pythonコードの一貫性を維持し、可読性を向上させるのに役立ちます。また、他のプログラマとの共同作業を容易にし、コードの品質を向上させます。

PEP8に従ったスクリプトの確認

PythonスクリプトがPEP8に従っているか確認するには、様々なツールやコマンドラインツールを使用できます。以下は、一般的な方法の概要とコード例です。

方法1: PEP8コマンドの使用

PEP8コマンドはPythonスクリプトを解析し、PEP8の規約に従っているかを確認します。


pip install pep8
pep8 your_script.py

    

方法2: Flake8コマンドの使用

Flake8はPEP8の規約だけでなく、他のコーディング規約にも対応するツールです。


pip install flake8
flake8 your_script.py

    

コードの例


# 以下はPEP8に従ったスクリプトの例です

# インポート文はコードの先頭に記述
import os
import sys

# 関数やクラスの前に空白行を挿入
def my_function(param1, param2):
    return param1 + param2

class MyClass:
    def __init__(self):
        self.value = 0

# 変数名は小文字の単語またはアンダースコアを使用
my_variable = 42

# 定数は大文字で表記し、アンダースコアで単語を区切る
MY_CONSTANT = 3.14159

# プライベート変数はアンダースコアで始める
_private_variable = "This is private"

    

PEP8に従ったスクリプトの確認は、コードの品質を維持し、可読性を向上させるのに役立ちます。ツールを使用してスクリプトを定期的にチェックすることをお勧めします。

にほんブログ村 教育ブログへ
にほんブログ村
インターネット・コンピュータランキング
インターネット・コンピュータランキング
ブログ王ランキングに参加中!
PC関連ランキング
くる天 人気ブログランキング

【Python】コードの記述方法(PEP8に準拠したコーディング規約)【プログラミング入門】-Introduction for beginners-」への1件のフィードバック

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です