本文示例代码及文件已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes

1 简介

  尽管有那么多花里胡哨的debug工具和方式供我们选择,但不得不承认,在大多数情况下,print()才是最方便的代码调试方式,通过手动在程序中的关键位置书写合适的打印语句,可以很快速地帮助我们了解到程序运行的过程,发现问题所在。

  而icecream就是一个将print大法发挥到极致的Python库,它的工作方式有些像vscode中针对javascript的插件Turbo Console Log,下面就让我们一起来领略icecream中的实用功能吧~

2 利用icecream进行高效debug

  让我们先来看看icecream最基础的使用方式,假如我们需要在循环过程中打印每一轮对应的几个变量,为了使得显示的信息更为清楚,传统的方式可以这样做:

from icecream import ic

for i in range(3):

    j = i + 1
k = i ** 2 print('i : ', i, 'j : ', j, 'k : ', k)

  而基于icecream,事情就变得简单了一些:

for i in range(3):

    j = i + 1
k = i ** 2 ic(i, j, k)

  比较一下差异,效果一目了然:

  这就是icecream的基础用法,下面我们来学习其更加丰富的功能特性:

2.1 利用icecream检查各种变量

  icecream可以对任何类型的变量进行检查,只需将变量传入ic()中即可,甚至连pandas中的数据框都可以友好地进行打印输出:

import pandas as pd

def demo_func(x):

    return x + 1

class DemoClass:

    a = 1

demo_df = pd.DataFrame({
'a': [1, 2, 3],
'b': ['a', 'b', 'c']
}) ic(demo_func(1))
ic(DemoClass.a)
ic(demo_df);

2.2 检查代码执行位置

  很多时候我们在调试代码打印一些关键位置结果时,希望可以快速找到对应结果在代码中的位置,利用ic(),不传递任何参数时,会自动打印出所在位置、所属父级函数等信息:

from icecream import ic

def demo():
ic()
a = 1 if 1 > 0:
ic()
a += 1
else:
ic()
a -= 1 demo()

2.3 一处导入处处使用

  当你的项目拥有一个主文件,其他的子模块都在主文件中被调用时,那么你就可以在主文件开头执行下列代码,之后无需在子模块中导入icecream也可以使用ic()

from icecream import install
install()

2.4 个性化设置

  除了使用icecream默认的信息打印格式之外,我们还可以利用ic.configureOutput()来自定义一些显示参数,譬如:


  更多自定义参数可以访问https://github.com/gruns/icecream#configuration查看更多。

  正如icecream的简介中所说的那样:别再使用print()进行debug,大家可以在日常使用过程中多多使用icecream,体会其便捷之处。


  以上就是本文的全部内容,欢迎在评论区与我进行讨论~

(数据科学学习手札127)在Python中使用icecream实现高效debug的更多相关文章

  1. (数据科学学习手札126)Python中JSON结构数据的高效增删改操作

    本文示例代码及文件已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 在上一期文章中我们一起学习了在Python ...

  2. (数据科学学习手札32)Python中re模块的详细介绍

    一.简介 关于正则表达式,我在前一篇(数据科学学习手札31)中已经做了详细介绍,本篇将对Python中自带模块re的常用功能进行总结: re作为Python中专为正则表达式相关功能做出支持的模块,提供 ...

  3. (数据科学学习手札136)Python中基于joblib实现极简并行计算加速

    本文示例代码及文件已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 我们在日常使用Python进行各种数据计算 ...

  4. (数据科学学习手札53)Python中tqdm模块的用法

    一.简介 tqdm是Python中专门用于进度条美化的模块,通过在非while的循环体内嵌入tqdm,可以得到一个能更好展现程序运行过程的提示进度条,本文就将针对tqdm的基本用法进行介绍. 二.基本 ...

  5. (数据科学学习手札54)Python中retry的简单用法

    一.简介 retry是一个用于错误处理的模块,功能类似try-except,但更加快捷方便,本文就将简单地介绍一下retry的基本用法. 二.基本用法 retry: 作为装饰器进行使用,不传入参数时功 ...

  6. (数据科学学习手札90)Python+Kepler.gl轻松制作时间轮播图

    本文示例代码及数据已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 Kepler.gl作为一款强大的开源地理信 ...

  7. (数据科学学习手札49)Scala中的模式匹配

    一.简介 Scala中的模式匹配类似Java中的switch语句,且更加稳健,本文就将针对Scala中模式匹配的一些基本实例进行介绍: 二.Scala中的模式匹配 2.1 基本格式 Scala中模式匹 ...

  8. (数据科学学习手札109)Python+Dash快速web应用开发——静态部件篇(中)

    本文示例代码已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 这是我的系列教程Python+Dash快速web ...

  9. (数据科学学习手札118)Python+Dash快速web应用开发——特殊部件篇

    本文示例代码已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 这是我的系列教程Python+Dash快速web ...

随机推荐

  1. 黑马c++基础的一个通讯录系统

    前言: 代码写的挺简单的,更像是c语言的课设,然后没有持久化的东西,之前也写过一个类似的,不过我写的纯c语言大概有1700多行,把信息全用文件存起来了, 所以如果要写完整的话,最好还是用数据库或者文件 ...

  2. 为LInux系统安装坚果云网盘

    首先 从www.jianguoyun.com/s/downloads/linux 中下载安装包(deb.rpm) deb 包安装及解决依赖方法 1. 使用 gdebi 安装,自动安装依赖 sudo g ...

  3. LeetCode解题记录(双指针专题)

    1. 算法解释 双指针主要用于遍历数组,两个指针指向不同的元素,从而协同完成任务.也可以延伸到多个数组的多个指针. 若两个指针指向同一数组,遍历方向相同且不会相交,则也称为滑动窗口(两个指针包围的区域 ...

  4. [刘阳Java]_CSS数字分页效果

    先给出效果图,见下图.下图主要的完成当鼠标放到分页数字的上会呈现一个变大的效果 实现思路: (1). 使用浮动属性,以便让li元素水平排列. (2).将a元素设置为块级元素,然后设置它们的尺寸. (3 ...

  5. ClickHouse学习系列之八【数据导入迁移&同步】

    背景 在介绍了一些ClickHouse相关的系列文章之后,大致对ClickHouse有了比较多的了解.它是一款非常优秀的OLAP数据库,为了更好的来展示其强大的OLAP能力,本文将介绍一些快速导入大量 ...

  6. JavaScript学习笔记:你必须要懂的原生JS(一)

    1.原始类型有哪几种?null是对象吗?原始数据类型和复杂数据类型存储有什么区别? 原始类型有6种,分别是undefined,null,bool,string,number,symbol(ES6新增) ...

  7. 微信小程序云开发-云存储-带图片的商品列表携带id跳转至商品详情

    一.商品列表页 1.wxml文件 在view中添加点击事件goToGoodDetail,绑定数据data-id <!-- 添加点击事件goToGoodDetail --> <view ...

  8. Dubbo的优雅下线原理分析

    文/朱季谦 Dubbo如何实现优雅下线? 这个问题困扰了我一阵,既然有优雅下线这种说法,那么,是否有非优雅下线的说法呢? 这,还真有. 可以从linux进程关闭说起,其实,我们经常使用到杀进程的指令背 ...

  9. POJ3048

    素数筛,数据范围不大,直接暴力筛. 坑:有个数据是 1 1,答案是1.差点没把我卡去世. 我的三观哪去了. #include<iostream> #include<cstdio> ...

  10. HTMLTestRunner.py 文件,已修改完成

    """ A TestRunner for use with the Python unit testing framework. It generates a HTML ...