Try   HackMD

コーディング規約 Python編

これは私が最善だと思っているもので、万人受けはしないのでそこらへんはご了承しろください

基本的にはPEP8に従う

適切な型定義

よくない

array = []; # この時点では`array`はany型となる

array.append(getHogeData(fuga, piyo))

よい

array: list[int] = []

array.append(getHogeData(fuga, piyo))

このように書くとarrayにはint型の値が配列として入ることがわかりますね

個人的にはunknown型があると便利だと思うのですが、Pythonにはないようです
困ります

try-exceptは最小限に

まず、例外(Exception)はexceptで握りつぶすべきではないです
例外はプログラムが継続して実行できなくなったときに投げるものです

でも、外部のライブラリ等では何食わぬ顔で例外を投げてくるのでその場合は以下のようにしましょう

よくない

def some_function():
  try:
    data = some_api_request() # ここで例外が発生するかも
    result = some_unwrap_fn(data)
    
    # なんかめっちゃ処理
    
    return piyo_piyo_data
  
  except:
    return some_error_handler()

よい

def some_function():
  data = None
  
  try:
    data = some_api_request() # ここで例外が発生するかも
  
  except:
    data = some_error_handler()
  
  result = some_unwrap_fn(data)

  # なんかめっちゃ処理

  return piyo_piyo_data

try-exceptの中に入るコードは最小限にとどめましょう

インデント

インデントはスペース2つ

インデントにタブを使用するとエディタや環境によって幅が変わってしまうのでスペースがよい

個人的にはスペース4つは幅がでかすぎるのでスペース2つ

インポート

  1. Python標準モジュール
  2. 外部モジュール
  3. 他のPythonファイル

すべてモジュール名をアルファベット順に並べる

使っていないモジュールはインポートしない

命名規則

ファイル名・変数・関数

lower_snake_case

  • 全部小文字
  • 単語間を_で区切る

クラス

UpperCamelCase

  • 単語の頭を大文字にする
  • 単語間の区切り文字はなし

定数

(厳密にはPythonでは定数定義はできない)

UPPER_SNAKE_CASE

  • 全部大文字
  • 単語間を_で区切る

改行

  • インポートとそれ以外の間は2行開ける
  • if・for等のあとは1行開ける
  • class内ではメソッドのあとは1行ずつ開ける

よくない

import os
class Hoge():
  def hoge(self, a: str) -> bool:
    if a == "a":
      return true
    else
      return false
def fuga():
  return "fuga"

よい

import os


class Hoge():
  
  def hoge(self, a: str) -> bool:
    if a == "a":
      return true
    
    else
      return false
    
def fuga():
  return "fuga"