使いやすい
お恥ずかしながらたまにデバッグモード使うのもめんどくさいとき、printに頼った経験は皆さんも多々あると思いますが、loggerとかと併用してたり、print文がそもそも多かったりすると、どの行のprintがどの出力かわかんなかったりします。
def multiply(a, b):
return a * b
print(multiply(1, 2))
print(multiply(3, 4))
print(multiply(4, 5))
print(multiply(5, 6))
print(multiply(6, 7))
print(multiply(7, 8))
print(multiply(8, 9))
出力
6
12
20
30
42
56
72
「上から5行目だから、、、1,2,3....」
その対策として、以下のようにする人もいるかもしれません。(私です)
print(multiply(6, 7), '5行目')
これいちいち書くの面倒ですし、誰にも見られたくないですよね。
そこで皆さん
pip install icecream
しましょう。
何が良いって、何の出力化も明示してくれるところです。しかもカラフル。
しかも一行で2つ出力しても何を出力しているかちゃんと教えてくれる。
# loggingの例
logger = logging.getLogger()
ic(logger, type(logger))
ちゃんと改行して、
logger:
type(logger):
という風に、何の出力か教えてくれます。
これいいよね。
辞書もお手の物
以下のような辞書をicecreamで出力してみます。
data = {
"products": [
{
"name": "T-shirt",
"details": {
"color": "blue",
"size": "medium",
"material": "cotton"
}
},
{
"name": "Jeans",
"details": {
"color": "black",
"size": "32",
"material": "denim"
}
},
{
"name": "Sneakers",
"details": {
"color": "white",
"size": "10",
"material": "leather"
}
},
{
"name": "Backpack",
"details": {
"color": "gray",
"size": "large",
"material": "nylon"
}
},
{
"name": "Watch",
"details": {
"color": "silver",
"size": "one-size",
"material": "stainless steel"
}
}
]
}
出力
引数なしでも便利
ある関数を定義して、その関数が実行されているか、またはどこまで到達しているかを引数なしのic()で確認することができます。引数なしとありを組み合わせると、結構パワフルですよね。
ic.disable() と ic.enable() 関数によって、デバッグ出力のオン/オフを簡単に切り替えることができます。
def add_and_subtract(a, b):
addition = a + b
ic()
ic(addition)
subtraction = a - b
return addition, subtraction
def main():
add_and_subtract(10, 5)
add_and_subtract(20, 15)
ic.disable()
add_and_subtract(30, 25) # この行はprintされなくなる
ic.enable()
add_and_subtract(40, 35)
if __name__ == '__main__':
main()
このようにic() は出力に変数名や式を含めるため、デバッグ情報がどのコード行から来たのかが明確になります。