初心者のためのpython入門

自分がつまづいたところやつまづきやすいところを中心に書いていきます。また、役に立つライブラリの紹介などをしていきます。

ライブラリ紹介[2/100]: easydict

前書き

今回は、easydictを紹介します。

easydict

辞書オブジェクトの値に属性としてアクセスすることが可能になります。

インストール

pip install easydict

使い方

辞書オブジェクトをEasyDictでラップします。

>>> numbers = {"one": 1, "two": 2, "three": 3}

>>> numbers["one"]
1
>>> numbers.one
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'dict' object has no attribute 'one'

>>> from easydict import EasyDict
>>> enumbers = EasyDict(numbers)
>>> enumbers.one
1

辞書オブジェクトで値に属性としてアクセスしようとするとAttributeErrorが発生します。

後書き

お疲れ様でした。次回も違うライブラリを紹介します。

ライブラリ紹介[1/100]: tqdm

前書き

今回から便利なライブラリとその使い方を100個紹介していきます。
記念すべき最初のライブラリはtqdmです。
公式のREADMEにインストールの仕方や使い方が詳しく書かれていますが...日本語での紹介として載せておきます!

tqdm

forループなど反復処理の進捗を表すプログレスバーを表示することができるようになります。

インストール

pip install tqdm

使い方

iterableなobjectをtqdmでラップすることtqdm(iterable)で使えるようになります。

>>> from tqdm import tqdm
>>> import time
>>> for i in tqdm(range(10)):
...     time.sleep(1)
...
 50%|████████████████████▌                    | 5/10 [00:05<00:05, 1.00s/it]

プログレスバーに表示される情報は以下になります。

現在/全体のイテレーション回数 経過/予測終了時間 1 イテレーションにかかる時間
5/10 00:05<00:05 1.00s/it

プログレスバーに表示する情報は自分でカスタマイズすることもできます!

後書き

お疲れ様でした。 詳しく知りたい方は、ぜひ公式のrepositoryやgithub.ioを覗いてみてください!

tqdm.github.io

numpy.nanをcheck!

前書き

久しぶりの更新になりました。 今回は、変数の値がnumpy.nanか判定する方法を紹介していきます。 方法はいくつかありますが、その中でもわかりやすいものを2つ紹介します。

math.isnan

intやfloatを扱うことができますが、listやnumpy.array、tupleなどを扱うことはできません。

>>> import numpy as np
>>> import math
>>> value = np.nan
>>> math.isnan(value)
True
>>> values = [1, np.nan, 3]
>>> math.isnan(values)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>

numpy.isnan

listなども扱うこともできます。

>>> import numpy as np
>>> value = np.nan
>>>np.isnan(value)
True
>>> values = [1, np.nan, 3]
>>> np.isnan(values)
array([False,  True, False])

後書き

numpy.nanの判定を方法を紹介しました。

Coding Errorをcheck!

前書き

前回は、Coding Styleを紹介しました。
今回は、Coding Errorをチェックするライブラリを紹介します。

Pylint

コーディングエラーのチェックには、pylintを使用します。インストールは、pipを使います。
pip install pylint

実際に使っていきましょう。使い方は、簡単です。コマンドラインからpylint <.pyファイル> と実行することができます。

sample.pyを用いて例を確認してみましょう。

def sum(a, b):
    return a+b
$ pylint sample.py                                                                                                                                                                                        
************* Module sample
sample.py:1:0: W0622: Redefining built-in 'sum' (redefined-builtin)
sample.py:1:0: C0114: Missing module docstring (missing-module-docstring)
sample.py:1:0: C0103: Argument name "a" doesn't conform to snake_case naming style (invalid-name)
sample.py:1:0: C0103: Argument name "b" doesn't conform to snake_case naming style (invalid-name)
sample.py:1:0: C0116: Missing function or method docstring (missing-function-docstring)

-------------------------------------
Your code has been rated at -15.00/10

上記のようにエラーになりそうな部分が報告されます。メッセージの種類については、こちらで確認できます。

後書き

お疲れ様でした。Coding StyleとCoding Errorを適宜確認することにより、快適な開発ができるようになります!!

Coding Styleを自動でチェック!

前書き

お久しぶりです。今回は、コーディングスタイルの自動チェックについて紹介したいと思います。

コーディングスタイルとは

コーディングスタイルとは、その名の通りコードを書く時のスタイルです。コードを書く時に一行に何文字書くべきなのかと迷ったことはないでしょうか?
このような疑問を解消するためにPythonコードを書くための標準スタイルが定義されました。詳しくはこちらPEP 8 -- Style Guide for Python Code | Python.orgをご覧ください。 標準スタイルでは、

  • インデントはスペース4つ
  • タブよりスペースの方が好ましい
  • 一行は79文字まで

などのスタイルガイドが定義されています。 これらのガイドラインに従うことにより、他の人にも読みやすコードになります。しかし、自分で全ての規約を満たしているかを確認するのは大変です。 そこで、自動でガイドラインに沿っているかをチェックするライブラリを紹介します。

pycodestyle

スタイルのチェックには、pycodestyleを使用します。インストールは、pipを使います。
pip install pycodestyle

実際に使っていきましょう。使い方は、非常に簡単です。 コマンドラインからpycodestyle <.pyファイル>と実行することができます。

sample.pyを用いて例を確認してみましょう。

def sum(a, b):
  return a+b
# コマンドラインで実行
$ pycodestyle sample.py
sample.py:2:3: E111 indentation is not a multiple of four
sample.py:3:1: W391 blank line at end of file

上記のようにスタイルに違反してるところが報告されます。スタイルガイドで義務付けられているものに関する違反はエラーとみなされ、エラーコードがEから始まります。それほど重要ではないが直した方が良いものは警告としてエラーコードがWから始まります。今回の例では、1つ目がエラー、2つ目が警告です。エラーが出た場合は、エラーの説明に従って直すと良いでしょう!

後書き

お疲れ様でした。今回は、Coding Styleとそのチェック方法について紹介しました。標準スタイルを守って、他の人が読みやすいコードを書くことを心がけていきましょう!