Python每天3分钟 #046 – 调式小能手icecream

欢迎访问Python每天3分钟系列。

每天花3分钟时间,学习或温习一个Python知识点。今天是第046篇:

调试小能手icecream

我们经常会使用print()函数打印代码执行的结果或者中间值。目的是为了测试代码或者调试代码执行过程。

看这个函数:

def square_of(num):
    return num*num

为了查看函数执行结果,我们可能会写如下代码:

print(square_of(2))
print(square_of(3))
print(square_of(4))

但这样打印出的结果并不明显:

4
9
16

如果程序有很多打印输出,可能会看不出这是什么意思。最好打印的更加全面点:

print('2的平方:', square_of(2))
print('3的平方:', square_of(3))
print('4的平方:', square_of(4))

这时候结果要清楚多了:

2的平方: 4
3的平方: 9
4的平方: 16

但这样很麻烦!为了解决这个麻烦,现在请出今天的主角: icecream

图片

安装

python -m pip install icecream

安装可能需要一点时间:

Collecting icecream
  Downloading icecream-2.1.1-py2.py3-none-any.whl (8.1 kB)
Collecting asttokens>=2.0.1
  Downloading asttokens-2.0.5-py2.py3-none-any.whl (20 kB)
Collecting pygments>=2.2.0
  Downloading Pygments-2.11.2-py3-none-any.whl (1.1 MB)
     |████████████████████████████████| 1.1 MB 33 kB/s 
Collecting executing>=0.3.1
  Downloading executing-0.8.2-py2.py3-none-any.whl (16 kB)
Collecting colorama>=0.3.9
  Downloading colorama-0.4.4-py2.py3-none-any.whl (16 kB)
Requirement already satisfied: six in /Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages (from asttokens>=2.0.1->icecream) (1.16.0)
Installing collected packages: pygments, executing, colorama, asttokens, icecream
Successfully installed asttokens-2.0.5 colorama-0.4.4 executing-0.8.2 icecream-2.1.1 pygments-2.11.2

基本用法

from icecream import ic

def square_of(num):
    return num*num

ic(square_of(2))
ic(square_of(3))
ic(square_of(4))

现在不用使用print()了,使用ic(),它会自动打印出相关的函数名,参数等信息,可以说是一目了然:

ic| square_of(2): 4
ic| square_of(3): 9
ic| square_of(4): 16

其他用法

除此之外,还可以打印字典信息:

my_dict = {
    'name': 'Chris',
    'age': 33
}
ic(my_dict['name'])

打印结果会清清楚楚的写出字典名字和key:

ic| my_dict['name']: 'Chris'

也可以打印对象的属性:

class Dog():
    num_legs = 4
    tail = True
    
dog = Dog()
ic(dog.tail)

打印结果:

ic| dog.tail: True

关闭ic

如果使用print(),我们在调试完成后,还需要注释掉相关的打印语句,否则会输出很多不必要的信息,也会让程序变慢。

使用icecream就没这个烦恼了,因为我们可以用一句话关闭所有的icecream打印:

ic.disable()

加上这一句,整个世界清净了,不需要一句句去注释掉打印语句:

图片
disable后所有打印都消失了

三者对比

icecream可以说是一个不错的print()的升级版,有上面说的诸多好处,更加方便调试程序,很值得大家学习和尝试。但它的主要应用场景是调式,而不应该替代更加强大的logging框架。可以这么说:

  • print()最简单
  • icecream处于中间
  • logging在三者中间最强大

原文链接:http://www.zsiss.com/5634.html,转载请注明出处。

0

评论0

请先

爱分享推出ChatGPT国内镜像,无需魔法直接用!写文章,写代码,做PPT,做网站原创软文效果好到爆炸 https://chat.gcrup.com

社交账号快速登录