101010

プログラミング備忘録とともに、ポエムってます。

PEP8を読んだまとめ

f:id:araemonz:20190114235453p:plain

PEP8(日本語)を読んで、印象に残ったところをまとめておきます。 https://pep8-ja.readthedocs.io/ja/latest/

原文はこちらのようです。 https://hg.python.org/peps/file/tip/pep-0008.txt

PEPとはPython Enhancement Proposalsの略のようです。 また「pep」という単語があるということを知り、調べてみると、「元気」や「気力」の意味ということがわかりました。(あの飲み物は、そういうことだったんですね)

  • 1行の長さは80文字以内に収める -> 二窓で表示した時もレイアウトが崩れない
  • 演算子の前で改行すると目の動きが少なくて済む -> 算数の計算と似ている
income = (gross_wages
          + taxable_interest
          + (dividends - qualified_dividends)
          - ira_deduction
          - student_loan_interest)
  • 関数、変数、メソッド名、インスタンス変数はlower_case_with_underscores、小文字とアンダースコアで表現する
  • 公開されていないメソッドやインスタンス変数にだけ、アンダースコアを先頭に付ける(PythonにはPrivateなものは存在しない)
  • 定数は UPPER_CASE_WITH_UNDERSCORES
  • クラス名は CapitalizedWord方式を使うべき -> ただし、HttpServerErrorより HTTPServerErrorの方が良い
  • Objective-Cにある、NSなどのプリフィックスは不要。なぜなら、Pythonの属性やメソッドの名前の前にはクラス名が付き、関数名の前にはモジュール名が付くから
  • モジュールの名前は、全て小文字の短い名前にすべき。アンダースコアも使って良い。
  • Python のパッケージ名は、全て小文字の短い名前を使うべきだが、アンダースコアを使うのは推奨されない
  • インスタンスメソッドのはじめの引数の名前は常に self を使うこと -> 実は、selfをhogeにしても動くという事実!
def do_something(hoge, name):
    return hoge.name >= name
  • パフォーマンスに敏感な部分には、a += b や a = a + b ではなく ''.join() を代わりに使うべき -> 文字列の連結が線形時間で終わる
  • None のようなシングルトンと比較をする場合は、常に is か is not を使うべき。絶対に等値演算子を使わないこと
  • if x is not None と書いているつもりで、 if x と書いている場合は注意!たとえば、デフォルトの値がNoneになる変数や引数に、何かしら別の値が設定されているかどうかをテストする場合です。この「別の値」は、ブール型のコンテクストでは False と評価される(コンテナのような)型かもしれませんよ!
  • 式を返しているreturn文が関数の中にある場合、値を何も返さないreturn文は 明示的に return None と書くべき
  • 文字列にプレフィックスやサフィックスチェックには、''.startswith() と ''.endswith() を使う
  • 文字列, リスト, タプルでの空はFalseになるので次のように書ける
if not hoge:
if hoge:
  • True や False を比較するのに == を使わないこと
NG   if hoge == True:
NG   if hoge is True:
OK   if hoge: