PythonZen & PEP 8 検定 試験問題解説)PEP 8に即していないインデントの使い方をしているコードを、次の選択肢の中から選びなさい。

3月からPythonZen & PEP 8 検定試験が始まりましたね。こちらからオンラインで受験することができます。当コラムでは、こちらの試験問題の解説を行なっていきます。このコラムを読んで、ぜひ試験に挑戦してみてください。

今回の試験問題はこちらです。

問題

PEP 8に即していないインデントの使い方をしているコードを、次の選択肢の中から選びなさい。

  1. 引数が一行で収まらない場合は、第一引数の開始位置に揃える。
foo = long_function_name(var_one, 
                         var_two,
                         var_three, 
                         var_four)
  1. 引数が一行で収まらない場合は、二行目から始めてインデントをつける。
foo = long_function_name(
    var_one, 
    var_two,
    var_three, 
    var_four)
  1. 引数が一行で収まらない場合は、二行目からインデントをつける。
foo = long_function_name(var_one, 
    var_two,
    var_three, 
    var_four)
  1. def文の場合は、引数と関数処理を区別させるために、引数のインデントをさらに追加する。
def long_function_name(
        var_one, 
        var_two,  
        var_three,
        var_four):
    print(var_one)

解答のヒント

PEP 8のインデント(Indentation)に関する問題になっています。

選択肢1について

インデントについて、Indentation に次のようなコードサンプルがあります。

# Aligned with opening delimiter.
foo = long_function_name(var_one, var_two,
                         var_three, var_four)

選択肢2について

インデントについて、Indentation に次のようなコードサンプルがあります。Hanging indent についてはこちらに注釈が書かれています。

# Hanging indents should add a level.
foo = long_function_name(
    var_one, var_two,
    var_three, var_four)

選択肢3について

インデントについて、Indentation に次のようなコードサンプルがあります。Arguments on first line forbidden when... に注目してください。

# Arguments on first line forbidden when not using vertical alignment.
foo = long_function_name(var_one, var_two,
    var_three, var_four)

選択肢4について

インデントについて、Indentation に次のようなコードサンプルがあります。

# Add 4 spaces (an extra level of indentation) to distinguish arguments from the rest.
def long_function_name(
        var_one, var_two, var_three,
        var_four):
    print(var_one)

正解はこちら

いかがでしたか。PEP 8の公式ガイドラインには、さまざまなケースに対応できるようなガイドラインが書かれています。上記の解答のヒントで参照している箇所を読めば、今回の問題もサラッと解けてしまうと思います。

正解は、PythonZen & PEP 8 検定試験で実際に試験を受けて確認してみてください。

そして、実際のPython開発にも活かしていただけると嬉しいです。