Pythonコードの可読性を向上させるツール「pycodestyle」の使い方を詳しく解説します
データサイエンスにおいてプログラミングは必須のスキルです。基本的な機能を実行するスクリプトを作成するのは簡単ですが、大量の読みやすいコードを書くには、より多くの思考が必要です。
PEP-8について
pycodestyle インスペクタは、PEP-8 スタイル規約に基づいたコード提案を提供します。では、PEP-8 とは一体何なのでしょうか?
PEPはPython Enhancement Recommendationの略で、PEP-8はPythonのコードを書くためのベストプラクティスの概要を示したガイドです。その主な目的は、コードスタイルを標準化することによって、コードの全体的な一貫性と可読性を向上させることです。
目的
PEP-8のドキュメントをざっと見たところ、ベストプラクティスが多すぎて覚えきれないことがわかります。
また、せっかく多くのコードを書いたのに、スクリプトの可読性を手作業でチェックするために時間を浪費したくないのは確かです。
そこで、pycodestyleが自動的にPythonスクリプトを解析し、コードの改善点を指摘します。
インストール方法
pipは好ましいインストーラーで、ターミナルで次のコマンドを実行することでpycodestyleをインストールまたはアップグレードすることができます。
final Handler myHandler = new Handler(MainActivity.this.getMainLooper()){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
if (msg.what == 0x123){
// there's a problem here (initially estimated to be an inter-thread problem)
Toast toast = Toast.makeText(MainActivity.this, "Have a nice trip! ", Toast.LENGTH_LONG);
toast.show();
}
}
};
基本的な使い方
最も簡単な使い方は、Pythonスクリプト(.pyファイル)上でターミナル上のコマンドとしてpycodestyleを実行することです。
以下のサンプルスクリプト(pycodestyle_sample_script.pyという名前)をデモに使ってみましょう。
final Handler myHandler = new Handler(MainActivity.this.getMainLooper()){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
if (msg.what == 0x123){
// there's a problem here (initially estimated to be an inter-thread problem)
Toast toast = Toast.makeText(MainActivity.this, "Have a nice trip! ", Toast.LENGTH_LONG);
toast.show();
}
}
};
//Send an empty message
myHandler.sendEmptyMessage(0x123);
以下の簡単なコマンドを実行することで、pycodestyleを実装します。
pycodestyle pycodestyle_sample_script.py
PEP-8スタイル規約に違反するコードの場所を指定する出力。
各行のコロンで区切られた一組の数字(例:3:19)は、それぞれ行番号と単語記号を示す。
例えば、6:64 E202 space before ")" と出力すると、6行目の64文字目のマーカーに予期せぬスペースがあることを意味します。
また、統計パラメータを解析することで、エラーの発生頻度を確認することができます。
pycodestyle --statistics -qq pycodestyle_sample_script.py
上の出力では、右括弧 ")" の前に予期せぬ4つの空白があります。
高度な使用法
Pythonのコードに直接pycodestyleをインポートして自動テストを実行することも可能です。これは、コーディングスタイルの一貫性について、複数のスクリプトを自動的にテストするのに便利です。
例えば、以下のようなクラスを書くと、PEP-8 の規約に準拠しているかどうかを自動的にチェックすることができます。
import unittest
import pycodestyle
class TestCodeFormat(unittest.TestCase):
def test_conformance(self):
"""Test that the scripts conform to PEP-8."""
style = pycodestyle.StyleGuide(quiet=True)
result = style.check_files(['file1.py', 'file2.py'])
self.assertEqual(result.total_errors, 0, "Found style
errors")
また、このツールは、私たちが定義したスタイルルールのプリファレンスに対してテストを行うように設定することができます。例えば、チェックで検出されたくない特定のエラーを削除することができます。
style = pycodestyle.StyleGuide(ignore=['E201', 'E202', 'E501'])
また、pycodestyleに対して、(特定のスタイルルールのセットを含む)異なるプロファイルを一緒に使用するように指示することもできます。
import pycodestyle
style = pycodestyle.StyleGuide(config_file='/path/to/tox.ini')
機能についてもっと詳しく知りたい場合は、pycodestyleのドキュメントをご覧ください。
https://pycodestyle.pycqa.org/en/latest/intro.html
まとめ
コードは書くよりも読まれる頻度が高く、コードの一貫性、理解しやすさ、構造の整頓が重要です。この記事では、PythonスクリプトがPEP-8コードスタイル仕様に準拠しているかどうかをチェックするためにpycodestyleツールを使用する方法を調べました。
これを使いこなすことで、コード品質を飛躍的に向上させることができると考えています。
Pythonコードの可読性を向上させる強力なツールであるpycodestyleの使用方法を詳しく説明します。
関連
-
[解決済み] ValueError : "Can only tuple-index with a MultiIndex " を取得する。
-
PythonでExcelとWordを自動化し、オフィスの自動化を実現
-
[解決済み] Pygameのフォントエラー
-
[解決済み] USBErrorです。[Errno 13] アクセスが拒否されました(権限が不足しています)。
-
[解決済み] Bokeh HoverToolに"?"が表示される。
-
[解決済み] Pythonの規約である**kwargs vs **kwds vs **kwとは何ですか?
-
[解決済み] gobjectモジュールのインストールは?
-
[解決済み] Python lxml tostring not print nsmap
-
[解決済み] .whl is not valid wheel filename, storing debug log for failure in C:\.
-
Resolve TypeError: 'NoneType' object has no attribute '__getitem__'.
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】NameError: name 'requests' is not defined [クローズド].
-
[解決済み】ilocが「IndexError: single positional indexer is out-of-bounds」と表示される。
-
[解決済み] ウェブサイト[timeanddate.com]からテーブルをスクレイピングする。
-
[解決済み] 辞書から最小の要素(複数可)を削除する
-
[解決済み] アスキーコーデックがバイト0xe9をデコードできない
-
[解決済み] mkstemp() ファイルへの Python 書き込み
-
[解決済み] Pythonで文字列内の他のすべての文字を大文字にする?[クローズド]です。
-
[解決済み] Scrapyで次のページをクロールする
-
[解決済み] PythonでStopIterationエラーを回避する方法
-
djangoのapacheへのデプロイメント