はじめに
とあるコミュニティに所属しており,その中でふと話題になってからすっかりハマってしまったライブラリIceCream
について紹介したいと思います.
IceCreamって?
デバッグに非常に便利なメソッドic
を提供するライブラリです.
print
文でも実装できるがめんどくさい.そんな時に大きな助けになってくれます.
IceCreamの使いかた
使い方は非常に簡単で,pip install icecream
を実行し,from icecream import ic
でインポートするだけです.
サンプルコードを確認してみます.
from icecream import ic
ic.enable()
ic()
def foo():
ic()
return 42
def bar():
ic()
return {'A': 1, 'B': [2, 3]}
hoge = ic(foo())
ic(hoge)
hoge = ic(bar())
ic(hoge)
実行結果は以下の通り.(ベースイメージがUbuntuのDockerコンテナ内での実行結果です)
ic
メソッドには大きく2つの使い方があります.1つ目は引数与えずに実行する方法,もう一つが引数を与える方法です.
引数を与えない場合,実行位置(行数・関数名)と時刻が標準出力に投げられます.すなわち,ic()
と記述するだけでその場所の実行が適切におこなわれているかがわかります.
ic() # 行数・関数名・時刻が標準出力に
次に,引数を与える場合です.
関数や変数を与えることができ,関数を与える場合にはその関数の返り値を受け取ることができます.print
とf-stringを用いれば同様の実装が可能ですが,面倒です.
ic(hoge) # hogeの値を出力
hoge = ic(fuga()) # fuga()の実行結果を出力し,返り値をhogeに格納
# print(f'{hoge = }') # print文で書くとこんな感じ
ここまでであれば,手癖で慣れている人にとっては大きな差にならないかもしれませんが,要素数が大きな返り値・変数の時に威力を発揮します.
from icecream import ic
ic.enable()
ic()
def foo_large():
ic()
return {idx: [idx_i for idx_i in range(idx)] for idx in range(10)}
hoge = ic(foo_large())
ic(hoge)
実行結果は以下の通りです.
見ていただいてわかるように,ある程度の大きさになると見やすい形に整形してくれます.pprint
を用いるなどの方法もありますが,それをするなら個人的にはic
だけで良いのではないかと感じています.
補足
私の環境(ベースイメージがUbuntuのDockerコンテナ)だけかもしれませんが,ic.enable()
をic
メソッド前に付けなければうまく動作しませんでした.
逆のメソッドとしてic.disinable()
というものもあり,デバッグモードの一括管理も可能です.
最後に
IceCreamライブラリを利用し始めてからというもの,どういう訳かIceCreamを使ってみたという記事がよくレコメンドされます.(推薦アルゴリズムの影響か,はたまた流行り始めているのか)
個人的には気に入りました.