Python 3 エンジニア認定実践試験対策 (4) - PEP8

Pythonを数年使ってきて、改めて知識の整理と最新仕様のキャッチアップのために Python 3 エンジニア認定実践試験を受験しようと思い、私的に作成した資料から簡易版を作成しました。
最後に練習問題を設けましたので、解説を読んだら記憶定着のために練習問題へチャレンジしてください。最後に答えを掲載しています。

### PEP8とは
- **目的**: Pythonコードを書く時の標準スタイルガイドであり、コードの可読性を向上させるためのルール。

- **利点**: 一貫したスタイルでコードを書くことで、チーム内での協力がスムーズになり、保守性が向上します。

### PEP8の主なルール

1. **コードのレイアウト**
   - **インデント**: 半角スペース4つを使用します。
   - **折り返しインデント**: 引数が複数行にわたる場合、最初の行のカッコに合わせてインデントします。
     ```python
     def sample_function(arg_one, arg_two,
                         arg_three, arg_four):
         print(arg_one)
     ```

2. **リストの整形**
   - リストの要素は縦に揃え、閉じカッコはリストの最初の要素の行に合わせます。これにより、コードの可読性が向上します。
     ```python
     value_list = [
         10, 20, 30,
         40, 50, 60,
     ]
     ```

3. **空行の使い方**
   - **トップレベルの関数やクラスの間**: 2行の空行を入れます。
   - **クラス内の変数やメソッドの間**: 1行の空行を入れます。

4. **import文のルール**
   - 異なるモジュールはそれぞれの行でimportします。
   - 同じモジュールに関するimportは1行にまとめます。
   - import文は以下の順番で書きます（それぞれのグループの間に1行空ける）:
     1. 標準ライブラリ
     2. サードパーティライブラリ
     3. ローカルライブラリ
     ```python
     import os
     import sys

     import requests

     from my_local_module import my_function
     ```

5. **空白の使い方**
   - 不要な空白は使わないようにします。
   - 代入や比較の際は、両側に1つの空白を入れます。
   - カンマの後には空白を入れ、閉じカッコの前には空白を入れません。
     ```python
     x = 5
     y = [1, 2, 3]
     ```

6. **コメントの書き方**
   - **ブロックコメント**: コードの前に、同じインデントで書きます。`#`の後には1つの空白を入れます。
   - **インラインコメント**: コードの後に書きますが、できるだけ使わないようにしましょう。
     ```python
     # これはサンプルのブロックコメントです
     result = sample_function(10, 20)  # サンプル関数を呼び出す
     ```

7. **docstringの使い方**
   - モジュール、関数、クラス、メソッドの説明を書くために使います。
   - 関数やメソッドの直後に書き、`"""`で囲みます。PEP 8では、3重シングルクォート（`'''`）も使用可能ですが、特に理由がない限り、ダブルクォートを使用することが推奨されます。これは、ダブルクォートが一般的に好まれるスタイルであり、コードの一貫性を保つためです。
   - 説明が複数行の場合は、1行目の後に空行を入れます。
     ```python
     def another_function(param_one, param_two):
         """この関数は2つのパラメータを受け取り、何かを返します。

         詳細な説明はここに書きます。
         """
         return param_one + param_two
     ```

### 8. 命名規約
   - 名前は「実装の内容よりも、その使い方や目的を明確に表すこと」が重視されます。つまり、変数や関数の名前は、その役割や機能が一目でわかるようにすることが大切です。
   - 基本的には小文字で書き、長い場合は単語ごとにアンダースコアでつなぎます。
      - 例: `user_input`, `calculate_sum`
   - 定数は大文字で書き、単語ごとにアンダースコアでつなぎます。
      - 例: `MAX_VALUE`
   - クラス名はキャメルケース（大文字で始まる）で書きます。
      - 例: `DataProcessor`

---
# Python 3 エンジニア認定実践試験対策 - PEP8 確認問題

# PEP8 - 確認問題

1. PEP 8の主な目的は何ですか？
   a) Pythonのパフォーマンスを向上させるため  
   b) コードの可読性を向上させるためのスタイルガイドを提供するため  
   c) Pythonのバージョンを管理するため  
   d) プロジェクトの依存関係を自動的に解決するため  

2. PEP 8では、インデントに何を使用することが推奨されていますか？
   a) タブ  
   b) 半角スペース2つ  
   c) 半角スペース4つ  
   d) 半角スペース8つ  

3. PEP 8におけるリストの整形に関するルールはどれですか？
    a) リストの要素は横に並べるべきである  
    b) リストの要素は縦に揃え、閉じカッコは最初の要素の行に合わせるべきである  
    c) リストの要素は全て同じ行に書くべきである  
    d) リストの要素はインデントをつけずに書くべきである  

4. import文の順番はどのように書くべきですか？
   a) サードパーティライブラリ、標準ライブラリ、ローカルライブラリ  
   b) 標準ライブラリ、ローカルライブラリ、サードパーティライブラリ  
   c) 標準ライブラリ、サードパーティライブラリ、ローカルライブラリ  
   d) ローカルライブラリ、標準ライブラリ、サードパーティライブラリ  

5. 空行の使い方に関するPEP 8のルールはどれですか？
   a) トップレベルの関数やクラスの間に1行の空行を入れる  
   b) クラス内のメソッドの間に2行の空行を入れる  
   c) トップレベルの関数やクラスの間に2行の空行を入れる  
   d) 空行は一切使用しない  

6. コメントの書き方に関するPEP 8のルールはどれですか？
   a) コメントはコードの後に書くべきである  
   b) ブロックコメントはコードの前に書き、`#`の後には空白を入れるべきである  
   c) コメントは全てインラインコメントで書くべきである  
   d) コメントは必要ない  

7. docstringを書く際、どのように囲むべきですか？
   a) `'''`  
   b) `"""`  
   c) `//`  
   d) `#`  

8. 命名規約において、クラス名はどのように書くべきですか？
   a) スネークケース（小文字とアンダースコア）  
   b) キャメルケース（大文字で始まる）  
   c) 全て大文字  
   d) 全て小文字  

9. 空白の使い方に関するPEP 8のルールはどれですか？
   a) 代入や比較の際は、両側に2つの空白を入れる  
   b) カンマの後には空白を入れ、閉じカッコの前には空白を入れない  
   c) 代入や比較の際は、両側に1つの空白を入れる  
   d) 空白は一切使用しない  

解答:
1. b  
2. c  
3. b  
4. c  
5. c  
6. b  
7. b  
8. b  
9. b