問題解説)PEP 8が推奨するカッコの閉じ方とカンマの使い方について、間違っているものを選択肢の中から選びなさい。

当コラムでは、PythonZen & PEP 8 検定試験(こちらでオンライン受験できます)で出題されている問題の解説を行なっています。当コラムシリーズを読んで自信がついたら、ぜひ試験に挑戦してみてくださいね。

今回のコラムで解説する試験問題はこちらです。

問題

PEP 8が推奨するカッコの閉じ方とカンマの使い方について、間違っているものを選択肢の中から選びなさい。

1

"fruits = [
    'apple',
    'banana',
    'cherry',
]"

2

"fruits = [
    'apple',
    'banana',
    'cherry',
    ]"

3

fruits = ['apple', 'banana', 'cherry',]

4

fruits = ['apple', 'banana', 'cherry']

解答のヒント

PEP 8の「末尾のカンマの使いどころ」(When to Use Trailing Commas)が今回の問題の範囲になっています。

末尾のカンマは通常は省略可能ですが、1つしか持たない持たないいタプルを作る場合は末尾のカンマを付けるべきです。そしてタプルであることを明確にするために、(技術的には冗長ですが)カッコで囲むことが推奨されれいます。

Trailing commas are usually optional, except they are mandatory when making a tuple of one element. For clarity, it is recommended to surround the latter in (technically redundant) parentheses:

# Correct:
FILES = ('setup.cfg',)
# Wrong:
FILES = 'setup.cfg',

バージョン管理システムを使用するときや、値や引数やインポートされた項目のリストなどが後に増えることが予想されるときには、末尾に冗長なカンマを付けておくと役に立ちます。値(など)を1つずつ1行に記述して、常に末尾にカンマを付け、次の行に閉じカッコを追加するのが形式的です。しかし、末尾のカンマを閉じカッコと同じ行に置くことには意味がありません(上述した値が1つしかないタプルの場合を除く)。

When trailing commas are redundant, they are often helpful when a version control system is used, when a list of values, arguments or imported items is expected to be extended over time. The pattern is to put each value (etc.) on a line by itself, always adding a trailing comma, and add the close parenthesis/bracket/brace on the next line. However it does not make sense to have a trailing comma on the same line as the closing delimiter (except in the above case of singleton tuples):

# Correct:
FILES = [
    'setup.cfg',
    'tox.ini',
    ]
initialize(FILES,
           error=True,
           )
# Wrong:
FILES = ['setup.cfg', 'tox.ini',]
initialize(FILES, error=True,)

以上のガイドラインを読んで、正解を導けましたでしょうか?
ガイドラインには具体的なサンプルコードも載っていますので、併せて確認しておきましょう。

ガイドラインには、ルールとして従わなくてはいけないこと(must)、推奨されること(should)、各ルールの適用例・非適用例(cases)が書いてあります。ルールを機械的に覚えるだけではなく、なぜこのルールがあるのかを意識していくと、理解が深まりますね。

自信がついてきたら PythonZen & PEP 8 検定試験 で実際に試験を受けて、正解を当ててみましょう。

そして、みなさんのPython開発にも活かしていただけると嬉しいです。

PAGE TOP