大家好,我是Lex 喜欢欺负超人那个Lex

擅长领域:python开发、网络安全渗透、Windows域控Exchange架构

今日重点:

调试python不要再用print()了,甜甜的冰激凌调试工具来了

【建议收藏,然后下来一定操作一遍】

事情是这样的

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

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

迎着微风贪婪的深吸一口,放下键盘,回想你这一生

最依赖的python的函数是什么

emmm,我猜一定是print()

从入坑案例 print('Hello World') 开始

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

但是在代码的寻常巷陌之间

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

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

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

以后用ice cream

icecream调试工具

1、安装 pip install icecream

pip install icecreamPS C:\Users\pacer> pip install icecream
Collecting icecreamDownloading icecream-2.1.1-py2.py3-none-any.whl (8.1 kB)
Collecting asttokens>=2.0.1Downloading asttokens-2.0.5-py2.py3-none-any.whl (20 kB)
Collecting executing>=0.3.1Downloading executing-0.6.0-py2.py3-none-any.whl (12 kB)
Requirement already satisfied: pygments>=2.2.0 in d:\python36\lib\site-packages (from icecream) (2.9.0)
Requirement already satisfied: colorama>=0.3.9 in d:\python36\lib\site-packages (from icecream) (0.4.3)
Requirement already satisfied: six in d:\python36\lib\site-packages (from asttokens>=2.0.1->icecream) (1.11.0)
Installing collected packages: executing, asttokens, icecream
Successfully installed asttokens-2.0.5 executing-0.6.0 icecream-2.1.1

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 icdef 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() 和 ic()访问方法进行对比:

#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() 和 ic()访问方法进行对比:

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

输出结果对比如下:

los angles
Trueic| lakers.city: 'los angles'
ic| lakers.NBA: True

案例4:精准调试代码

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

print() 和 ic()访问方法进行对比:

  • 我们可以精确的输出业务代码的位置。

案例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| testic.py:28 in position() at 14:28:51.172
ic| testic.py:31 in position() at 14:28:51.190
  • 包括前缀:ic
  • 文件名:testic.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('运行到这里了...')

输出结果如下:

---------The End--------

推荐阅读

python实战

  • 【python实战】前女友婚礼,python破解婚礼现场的WIFI,把名称改成了
  • 【python实战】前女友发来加密的 “520快乐.pdf“,我用python破解开之后,却发现
  • 【python实战】昨晚,我用python帮隔壁小姐姐P证件照 自拍,然后发现...
  • 【python实战】女友半夜加班发自拍 python男友用30行代码发现惊天秘密
  • 【python实战】python你TM太皮了——区区30行代码就能记录键盘的一举一动
  • 【python实战】女神相册密码忘记了,我只用Python写了20行代码~~~

【pygame开发实战开发30例 完整源码】

  • https://download.csdn.net/download/weixin_42350212/15836285

【pygame游戏开发专栏,获取完整源码+教程】

CSDN官方学习推荐 ↓ ↓ ↓

  • CSDN出的Python全栈知识图谱,太强了,推荐给大家!

答应我!忘了他吧!不要再用print了,以后调试Python用冰淇淋相关推荐

  1. 别再用print输出来调试代码了

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 本文转自|机器学习算法那些事 | 导语 最近在github上冒出了 ...

  2. 太阳花图片_6种漂亮的花,种子已经成熟,别忘采摘种子,来年再播种

    6种漂亮的花,种子已经成熟,别忘采摘种子,来年再播种 秋天很多一年生的草本植物都已经陆续开完花,大部分的种子也已经成熟,打算明年还要养的话,现在就要收集好种子,把它储存起来,不然再过一段时间,种子也都 ...

  3. NCEP再分析数据(FNL)Python下载

    NCEP再分析数据(FNL)Python下载 楼主第一次接触WRF模型,最近在摸索该如何使用WRF和相关数据如何下载,简单记录一下. 数据网址: https://rda.ucar.edu/datase ...

  4. 答应我,调试Python代码,不要再用Print了!

    相信大部分人学习Python,肯定会用print()这个内置函数,来调试代码的. 那么在一个大型的项目中,如果你也是使用print来调试你的Python代码,你就会发现你的终端有多个输出. 那么你便不 ...

  5. python这个软件学会能做什么工作-不要再复制粘贴了 !学会Python,分分钟搞定一整天的工作...

    上周末,好友小晶告诉我她想辞职了. 小晶在深圳一家电商公司做了 2 年的市场运营,为了更好的完成业绩,每天都赶着最后一班地铁回家. 虽然她才毕业 2 年,不过算上加班时长,我说她工作了 3 年真的不过 ...

  6. 安装完python需要再安装编辑器-最好用的Python编辑器——Pycharm之安装与设置

    跟着我的进度爬行的同学,也应该已经进入到了第七章,第七章的Python代码涉及到等待用户输入的函数input(),群里的Python大大给我们推荐了在线编辑器的链接,结果现在代码涉及到等待用户输入的函 ...

  7. 求你了,别再用 print 调试代码了

    " 阅读本文大概需要 5 分钟. " 大家好 对于每个程序开发者来说,调试几乎是必备技能. 代码写到一半卡住了,不知道这个函数执行完的返回结果是怎样的?调试一下看看 代码运行到一半 ...

  8. 运维学python哪部分_初入运维的小伙伴,别再问需不需要学Python了

    这篇文章来自百度知道(你可以搜索"运维需不需要学Python"),或许有些观点不一定正确,但运维学Python这事毫无疑问是主流了,不信可以到各大招聘网站,看看但凡招聘运维有编程技 ...

  9. 运维学python哪部分_运维新手们,别再问需不需要学PYTHON了

    经常有人在群里问,运维人员需不需要学开发?需不需要学PYTHON?PYTHON和SHELL有什么区别?天天问这种好水的问题,我实在受不了,决定帮大家扫扫盲,求求新手们,以后别他妈瞎问了. 现阶段,掌握 ...

最新文章

  1. 设计模式(八)代理模式(结构型)
  2. 电脑实用mysql后C盘内存不足_电脑高手用这方法,终于解决了C盘空间不足的问题,网友:这操作服了...
  3. c# 上传图片到一个外链相册服务器
  4. 基于Velocity的Web开发指南
  5. 电子工程师私藏的一个网站
  6. 互联网行业,常见含金量高的证书,看看你有几个?
  7. Mac 开发工具汇总
  8. 边城性格悲剧_悲剧! 我的手表已延迟!
  9. 关于人工智能的几点看法
  10. python怎么打开h5文件_python怎么查看h5文件-问答-阿里云开发者社区-阿里云
  11. JDBC之CallableStatement执行存储过程
  12. 字符串首尾空格去除问题
  13. android11obb,exagear安卓11数据包obb合集版
  14. 如何删除数组中的一个元素
  15. Python最强干货,建议收藏!!
  16. GBase 8s 数据库操作指南
  17. 全球与中国3D打印假肢市场深度研究分析报告
  18. 程序员不得不写得(一):Eclipse, VS.net, CSharpDevelope
  19. shell脚本常用语法——获得当前目录
  20. 专访万岁游戏 CEO 姚堃:探索 VR 游戏开发演进之路

热门文章

  1. b站 4天从零玩转jQuery【黑马程序员】部分案例代码_表格添加和删除案例
  2. Sql Server 2008日志满的解决办法
  3. 动态规划27k字超详细保姆级入门讲解——附DP经典线性、区间、二维图、四维8个模型题解
  4. 前端英语单词整理(更新ing...)
  5. 老闪创业那些事儿(84)——地面网络是怎么管理的
  6. html元素垂直、水平对齐的多种方式
  7. My Fourteenth Page - 两个数组的交集 - By Nicolas
  8. 改变el-button的样式
  9. 记忆方法<二> 数字编码转换学习
  10. URAL 1268. Little Chu 求最大原根