答应我,忘了他!调试python不要再用print了!冰淇淋工具来陪你甜

2021/7/2 17:51:17

本文主要是介绍答应我,忘了他!调试python不要再用print了!冰淇淋工具来陪你甜,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

  • 大家好,我是Lex 喜欢欺负超人那个Lex
  • 擅长领域:python开发、网络安全渗透、Windows域控Exchange架构
  • 今日重点:调试python不要再用print()了,甜甜的冰激凌调试工具来了

事情是这样的

  • 望着窗外,太阳在乌云背后努力想把阳光撒向人间

  • 雨过天青云破处吹来的缕缕微风拂过你的脸颊

  • 迎着微风贪婪的深吸一口

  • 拔掉电源,回想你这一生

  • 最依赖的python的函数是什么

  • emmm,我猜一定是print()

  • 从入坑案例 print(‘Hello World’) 开始

  • 你的代码越写越多,逻辑越来越复杂

  • 但是在代码的巷陌之间

  • 总是穿插着大量的print()调试语句

  • 输出的结果,让人欢喜让人忧

  • 答应我,从今天开始,忘了他

  • 以后用ice cream


ice cream

1、安装

pip install icecream

2、调用方法

from icecream import ic
ic('test')

案例解析

  • 下面我们通过几个比对案例,来详细介绍一下 ice cream 到底比 print() 强在哪里。

案例1:访问函数

#案例1:计算平方数
def pingfang(number):
	return number*number
  • 如果我们需要调试函数,获取2,3,4的平方数。那么输出结果,需要这么写
print(pingfang(2))
print(pingfang(3))
print(pingfang(4))
  • 输出结果如下:
4
9
16
  • 输出结果并不清晰,输入参数都看不见。

    优化一下:

print('2的平方是:',pingfang(2))
print('3的平方是:',pingfang(3))
print('4的平方是:',pingfang(4))
  • 输出结果如下:
2的平方是:4
3的平方是:9
4的平方是:16
  • 这样的输出,才是合理的,但是这样我们每个都要这么写,估计会疯掉。

    而且,当代码正式上线运行的时候,我们要注释大量的代码。

不扯了,上icecream

#引入icecream模块 代替print
from icecream import ic

def pingfang(number):
	return number*number
#使用ic进行调试
ic(pingfang(2))
ic(pingfang(3))
ic(pingfang(4))
  • 输出结果如下:
ic| pingfang(2): 4
ic| pingfang(3): 9
ic| pingfang(4): 16
  • 结果非常清晰。

案例2:访问字典

#示例2:科比字典访问
kobe_dict = {
  'name': 'KobeBryant',
  'team': 'LALakers',
  'number': 24,
  'halloffame' : True
}

访问方法:

#print方法
print(kobe_dict['team'])
#ic方法
ic(kobe_dict['team'])

输出结果对比

  • 高下立判
#print输出
LALakers

#ic输出
ic| kobe_dict['team']: 'LALakers'

案例3:访问对象

#示例3:湖人类
class Lakers():
    city = 'los angles'
    player = 'kobe'
    NBA = True

输出结果对比:

#print方法输出
lakers=Lakers()
print(lakers.city)
print(lakers.NBA)

#ic方法输出
ic(lakers.city)
ic(lakers.NBA)

案例4:精准调试代码

  • 我们在调试业务逻辑比较复杂的代码的时候,为了验证业务在哪个逻辑或者哪一行输出有问题了。一般都在要监控的代码下面,加一个
    print(‘aaa’)、print(‘bbbb’)或者print(’------------’),搞的代码非常混乱,而且输出也不够精准。
#示例4:记录代码位置
def position(name):
    if name == 'kobe':
        #啪啪啪,业务代码一大堆
        ic()
    else:
        #啪啪啪,业务代码又一大堆
        ic()
if __name__ == '__main__':
	position('kobe')
    position('micheal')

输出结果:

  • 我们可以精确的输出业务代码的位置。
    在这里插入图片描述

案例5:始乱终弃很方便

  • 当我们使用print()进行python调试的时候,加了一大堆又臭又长的 print(‘aaa’)、print(‘bbbb’)
    或者print(’------------’),当项目正式上线的时候,肯定要去注释掉这些test输出。
  • 这个时候,我们才发现:“他们都老了吗,他们在哪里呀~~~” 找不着了,是吧?!这时候又要翻箱倒柜的去找来注释。
  • 这时候,如果我们用icecream进行调试。只要开头加上一句
ic.disable() #关闭ic调试。[默认开启]
  • 你所有的添加的ic输出,相当于你的历史渣男记录,全部洗白。
  • 如下 ↓ ↓ ↓
from icecream import ic
#关闭所有ic调试输出
ic.disable()
#业务代码一大堆,啪啪啪...
#...
  • 如果想要使用ic输出,只要开头启用就好了。
ic.enable()  #启用ic调试

案例6:自定义ic输出很方便

  • icecream 的默认输出格式:
ic| test-ic.py:28 in position() at 14:28:51.172
ic| test-ic.py:31 in position() at 14:28:51.190
  • 包括:
包括前缀:ic
文件名:test-ic.py 
代码位置:28行 
函数:position()
  • 1、修改前缀:加上自定义内容
ic.configureOutput(prefix='lex的爬虫 | ')
ic('运行到这里了...')
  • 输出效果如下:
    在这里插入图片描述

2、输出代码运行的时间

  • 有时候,进行代码输出调试的时候,需要知道代码运行该位置时的精确时间,我们可以自定义icecream来实现带时间的输出。
#定义一个返回当前时间的函数
from datetime import datetime
def now():
    return f'[{datetime.now()}]'
#将函数返回值,配置进ic里
ic.configureOutput(prefix=now)
ic('运行到这里了...')
  • 输出结果如下:

在这里插入图片描述

推荐阅读

python实战

  • 【python实战】前女友婚礼,python破解婚礼现场的WIFI,把名称改成了

  • 【python实战】前女友发来加密的 “520快乐.pdf“,我用python破解开之后,却发现

  • 【python实战】昨晚,我用python帮隔壁小姐姐P证件照自拍,然后发现…

  • 【python实战】女友半夜加班发自拍python男友用30行代码发现惊天秘密

  • 【python实战】python你TM太皮了——区区30行代码就能记录键盘的一举一动

  • 【python实战】女神相册密码忘记了,我只用Python写了20行代码~~~

pygame系列文章【订阅专栏,获取完整源码】

  • 一起来学pygame吧 游戏开发30例(二)——塔防游戏

  • 一起来学pygame吧 游戏开发30例(四)——俄罗斯方块小游戏

  • 渗透测试实战专栏

  • Windows AD/Exchange管理专栏

  • Linux高性能服务器搭建

  • PowerShell自动化专栏

CSDN官方学习推荐 ↓ ↓ ↓

CSDN出的Python全栈知识图谱,太强了,推荐给大家!
在这里插入图片描述



这篇关于答应我,忘了他!调试python不要再用print了!冰淇淋工具来陪你甜的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程