IceCream:Python 调试不用再写 print()
文章目录IceCreamPython 调试不用再写 print()1、这玩意儿是干嘛的2、基本用法3、几个顺手的设计4、适合哪些人用IceCreamPython 调试不用再写 print()gruns/icecream 在 GitHub 上已经拿到 10,058 Star 了。这是一个 Python 调试库专门干一件事让 print 调试变得顺手。你不再需要写print(foo , foo)一个ic(foo)就能同时打出变量名和值。1、这玩意儿是干嘛的写 Python 的人几乎都用print()调过代码。问题是print()太原始了变量名和值分开写嵌套字典打印出来挤成一团多行输出混在一起看不清楚。IceCream 用ic()替代print()一行代码同时输出变量名和值数据结构自动格式化还有语法高亮。它还能打印执行上下文文件名、行号、所在函数。这些print()统统给不了。2、基本用法装起来很简单pipinstallicecream导入之后直接用fromicecreamimporticdeffoo(i):returni333ic(foo(123))输出ic| foo(123): 456ic()会自动检测传入的是变量还是表达式两边一起打印。字典、列表嵌套再深也能展开看。不带参数调用ic()它会打印当前位置信息fromicecreamimporticdeffoo():ic()first()ifexpression:ic()second()输出ic| example.py:4 in foo() ic| example.py:11 in foo()这在追踪代码执行路径时很实用。3、几个顺手的设计ic()返回传入的参数本身所以可以无缝插进现有代码a6defhalf(i):returni/2bhalf(ic(a))# 输出 a 的值同时正常参与计算ic.format()把输出变成字符串方便接进日志系统fromicecreamimportic ssupoutic.format(s)# 返回 ic| s: supic.disable()和ic.enable()控制全局开关上线前不需要逐行删除调试代码。用install()可以把ic()注入 Python 内置模块所有文件直接调用不用再逐个导入fromicecreamimportinstall install()输出格式也能自定义。前缀可以改成任意字符串或函数输出目标可以从 stderr 切到 logging参数序列化方式也能替换。甚至可以用functools.singledispatch注册特定类型的格式化函数比如 numpy 数组只打印 shape 和 dtype。4、适合哪些人用还在用print()调 Python 代码的开发者需要快速查看变量状态和代码执行路径的人项目里调试代码和日志系统需要灵活切换的场景IceCream 只干一件事把 print 调试的体验提上去。它没打算替代 pdb 这类正经调试器只是在日常开发里让那几十行print()写得快一点、看得清楚一点。对大多数 Python 开发者来说这就够了。只干一件事把 print 调试的体验提上去。它没打算替代 pdb 这类正经调试器只是在日常开发里让那几十行print()写得快一点、看得清楚一点。对大多数 Python 开发者来说这就够了。