ちょっとしたツールを書かなければならなくなったとき、それが碌につかったことがないPythonを指定されること、よくありますよね。
Python素人がそれっぽいコードを書くための最低限なところをまとめてみました。
ちょっと表現がよくないかもですが、パッと見で「大丈夫そうだな」と思ってもらえるのが目標です。
テンプレート
# -*- coding: utf-8 -*-
"""
hoge_tools.py
プログラム全体の説明を書きます。
実行方法とか必要なライブラリとか、
動作確認しているPythonのバージョンとか書くとよいと思いました
"""
from logging import getLogger, DEBUG
# ログの設定
logger = getLogger(__name__)
logger.setLevel(DEBUG)
# 定数です
NUM_SPHERE = 4
NUM_TRYSAIL = 3
def main():
""" エントリポイントだよ。
"""
logger.debug("mainの開始")
func_fugafuga(1)
def func_fugafuga(parm1):
""" なんか関数ですよ
@param parm1: この引数はとくにつかいません
"""
logger.error("エラーです!!")
class MyClass:
def __init__(self):
"""コンストラクタの説明
"""
self._pv_v = "インスタンス変数"
def process(self, parm1):
""" メソッドの説明
"""
logger.debug("process")
def _pv_process(self):
logger.debug("_pv_process")
if __name__ == "__main__":
main()
定数
# 定数です
NUM_SPHERE = 4
NUM_TRYSAIL = 3
Pythonでは定数を特に扱わないようなので、命名規約で縛ります。
全部大文字。
ロギング
# ログの設定
logger = getLogger(__name__)
logger.setLevel(DEBUG)
printを嫌って、ロギングにしてみました。
やってることは変わりませんが、printデバッグは避けた方が印象はよさそうです。
mainブロック
if __name__ == "__main__":
main()
トップレベルに処理をガリガリ書くのではなく、mainとして実行されたときのみ処理が実行されるようにする、Pythonのスタンダードな方法です。
例えば、テストケースを書くときにこのpyをimportなどしたときなどはmainが実行されないので、便利です。
命名規約
関数名、変数名はスネークケース、クラス名はキャメルケース、プライベートは"_"始まり。
と、これくらいは問題ありませんが、変数名は悩ましい。
Pythonを書いていると型でちょっと苦労することがあるので、ハンガリアンで命名したほうがよいのかも。
ただ、ベターだとも思えない。
Pythonはリストと辞書のネストが深くなりがちだし、それをコメントで説明するのも微妙な気がする。
ドキュメンテーションコメント
あまりルールが決まっていないっぽいです。いくつかライブラリのコードを見て参考にしてみました。
特にパラメータなどはバラバラですね。パラメータの説明などはJavaっぽく「@param」と書いてしまいましたが、これは絶対ではありません。
使っているエディタとかによるかも。
とはいえ、内容をしっかり書いておくと、ちゃんとしたプログラムっぽく見えます(姑息)
さいごに
まず、Pythonのバージョンは2なのか3なのかは最初に決めておこう!(自戒)
おわりです。