概要
とても便利なライブラリ知ったので、忘れない内にメモメモ。
READMEでまず出てくるアイスクリームちゃんがかわいい!
この時点で既にいい感じです。
どんな機能?
デバッグ時によく
print(f'somevalue={somevalue}')
とかやったりしませんか? 大体どんな言語でもやるときがあると思うのですが
このようなデバッグ出力を便利に出力させてくれるライブラリです。
勿論、通常時に利用しても全然いい感じです。
インストール
現状、conda
ではパッケージがありませんでした。(2018/03/27時点)
なので、pip
からインストール。
$ python -m pip install icecream
依存するライブラリもないので、すんなり入りました。
基本的な使い方
この記事を書いているときに使っているバージョンは
>>> import icecream >>> print(icecream.__version__) 1.3
です。
基本的な使い方は、README.md の方に詳しく書かれているので何も困らないのですが
一応英語なので、以下自分用のメモです。
インポート
ic()
のみ利用できればいいので
from icecream import ic
としておくと楽です。ちなみにic()
は関数みたいに見えますが
icecream.icecream.IceCreamDebugger
クラスのインスタンスです。
__call__
を実装しているので、そのまま呼び出しが出来るようになっています。
値を出力
print(f'somevalue={somevalue}')
と同じようにする場合は
ic(somevalue)
で終わりです。実行すると
ic| somevalue: xxx
と表示されます。これは便利ですね。
内部でinspect
モジュールを使ってフレーム情報を取得して
呼び出し部分を取得して出力してくれています。
なので、以下のように
l = list(range(10)) ic(l[-1])
とすると、ic| l[-1]: 9
って表示してくれるし
d = dict(zip(['apple', 'banana'], [100, 200]) ic(d['apple'])
とすると、ic| d['apple']: 100
と表示してくれます。
通ったかどうかの判定用
これも古いやり方かもしれませんが、やっぱりよく使われているやり方で
def tekito(): print(0) # 何か処理・・・・ print(1) ・ ・ ・
みたいに、どこを通ったのかを出力するものです。
icecream
の場合は以下のように書きます。
def tekito(): ic() # 何か処理・・・・ ic() ・ ・ ・
上記のように、引数無しでic()
と書いておくと
以下の用に出力されます。
ic| icecream_sample.py:73 in debug_ic() ic| icecream_sample.py:75 in debug_ic()
ファイルと行番号と今いる関数を出力してくれます。
print(0)
とかprint('step1')
とかするより有意義です。
引数の値をそのまま返してくれる
ic()
に渡した値をそのまま返してくれます。
なので、処理呼び出し時に渡している変数などをデバッグする際に
呼び出し前にいちいちprint
入れておかなくても、以下でいけます。
def tekito(x, y): return x + y x = 10 y = 20 tekito(ic(x), ic(y))
あと、先頭についている prefix を変更できたり、出力先を制御できたり(デフォルトは stderr))など
いろいろあるのですが、詳しくは 以下のちょこっと作ったサンプルや github の README などを参照ください。
サンプル
以下、ちょこっと試したサンプルです。
python icecream ライブラリのサンプル (debug, print, ic, co ...
実行すると以下のようになります。
ic| hello: 'world' ic| l01[-1]: 9 ic| d01['apple']: 100 ic| s01.pop(): 0 ic| dat1: Data1(x=100, y=200) 0 1 2 ic| icecream_sample.py:73 in debug_ic() ic| icecream_sample.py:75 in debug_ic() ic| icecream_sample.py:77 in debug_ic() ic| icecream_sample.py:88 in debug_ic2()- conn: None ic| icecream_sample.py:91 in debug_ic2()- conn: Data1(x=100, y=200) ic| icecream_sample.py:107 in debug_ic3()- conn: None ic| icecream_sample.py:110 in debug_ic3()- conn: Data1(x=100, y=200) ic| icecream_sample.py:111 in debug_ic3() ic| x: 10 ic| y: 20 2018/03/27 14:35:45 |> icecream_sample.py:165 in go() 2018/03/27 14:35:45 |> dat1: Data1(x=100, y=200) 2018/03/27 14:35:45 |> icecream_sample.py:167 in go()
過去の記事については、以下のページからご参照下さい。
- いろいろ備忘録日記まとめ
サンプルコードは、以下の場所で公開しています。
- いろいろ備忘録日記サンプルソース置き場