IceCream in Python

你还在使用print 在Python 中 debug 吗?赶快使用Icecream吧。

提到 Icecream,你是不是会想到ta?

动机

如果你使用print去检查你的code错误时,在你的终端看到很多行的输出时,你可能会很困扰,还要找出哪一个输出对应哪一个code.

例如,运行下面的code:

>>>num1 = 30
>>>num2 = 40 >>>print(num1) #30
>>>print(num2) #40

哪一个输出是num1,哪一个输出是num2, 这两个结果不是很难去分辨,但是如果有超过五种不同的输出那?找出每个code对应的结果可能是很花费时间的?

你可能需要去添加一些文本,以致于打印出来的陈述更容易辨别。

>>>num1 = 30
>>>num2 = 40 >>>print('num1',num1) #num1 30
>>>print('num2',num2) #num2 40

这个结果是很容易发现,但是,它是很费时的去花时间写一些文本,是否有一些其他的方式,不用一些附加的文本反而可以找到code和结果之间的对应关系?

>>>num1 = 30
>>>num2 = 40 >>>ic(num1) # ic| num1
>>>ic(num2) # ic| num2

这就是“冰淇淋”排上用上的时候!

什么是 Icecream

Icecream是一个python的库,可以用最小的代码打印出更多debug的可读信息。

pip install icecream

让我们尝试用它输出一个Python函数

from icecream import ic

def plus_five(num):
return num+5 ic(plus_five(4)) #ic| plus_five(4)=9
ic(plus_five(5)) #ic| plus_five(5)=10

通过使用ic,我们不仅看到了结果,也看到了函数形式和参数。这是多么简洁,在你终端的颜色可以显示出具体参数。

检测执行

为了找出哪一行的code 执行,你可以像下面展示的code这样去找到哪一行被执行。

def hello(user:bool):
if user:
print("I am user")
else:
print("I am not user") hello(user = True)
【output】: I am user

Icecream使得上面这个过程更加简单,通过使用ic(),而不加任何文本就可以实现!

from icecream import ic
# 定义函数
def hello(user:bool):
if user:
ic()
else:
ic() hello(user = True)

现在你可以知道这个code被执行在第五行, 函数是hello 函数,然后第七行的code是不是时候会被执行。

自定义前缀

如果你想嵌入一个自定义前缀,例如时间,这个代码被执行输出成print陈述,icecream也可以让你这么做。

from datetime import datetime
from icecream import ic
import time def time_format():
return f'{datetime.now}|>' ic.configureOutput(prefix = time_format) for _ in range(3):
time.sleep(1)
ic('hello')

现在时间自动被code展现在输出中,这是多么Cool呀!

可以得到更多的信息吗?

除了知道code与输出之间的对应关系,你也可能想知道Code从哪一行,哪一个文件被执行。要是想知道关于code的信息,可以加入includeContext = True ic.configureOutput

from icecream import ic 

def plus_five(num):
return num+5 ic.configureOutput(includeContext = True) ic(plus_five(4))
ic(plus_five(5))

现在你可以知道第一行输出是被第七行的函数plus_five所执行的

完成 Debug 后删除所有的 Icecream

你可以仅仅使用icecreamdebug,而使用print去做其他的事情,例如,很漂亮的输出!

from icecream import ic

def plus_five(num):
return num+5 ic(plus_five(4))
ic(puls_five(5)) for i in range(10):
print("***Traning model{i}***")

由于你可以对debug printpretty print进行区分。在你debug完成后,搜索并删除掉ic语句是更简单的。

删除ic debug后,你的代码看起来更加地简洁。

IceCream in Python的更多相关文章

  1. (数据科学学习手札127)在Python中使用icecream实现高效debug

    本文示例代码及文件已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 尽管有那么多花里胡哨的debug工具和方式 ...

  2. K-近邻算法python实现

    内容主要来源于机器学习实战这本书.加上自己的理解. 1.KNN算法的简单描写叙述 K近期邻(k-Nearest Neighbor.KNN)分类算法能够说是最简单的机器学习算法了. 它採用測量不同特征值 ...

  3. python机器学习实战(一)

    python机器学习实战(一) 版权声明:本文为博主原创文章,转载请指明转载地址 www.cnblogs.com/fydeblog/p/7140974.html  前言 这篇notebook是关于机器 ...

  4. k-近邻(KNN)算法改进约会网站的配对效果[Python]

    使用Python实现k-近邻算法的一般流程为: 1.收集数据:提供文本文件 2.准备数据:使用Python解析文本文件,预处理 3.分析数据:可视化处理 4.训练算法:此步骤不适用与k——近邻算法 5 ...

  5. Python:从入门到实践--第九章-类--练习

    #.餐馆:创建一个名为Restaurant的类,其方法_init_()设置两个属性:restaurant_name和cuisine_type. #创建一个名为describe_restaurant的方 ...

  6. Python机器学习笔记 K-近邻算法

    K近邻(KNN,k-NearestNeighbor)分类算法是数据挖掘分类技术中最简单的方法之一. 所谓K最近邻,就是K个最近的邻居的意思,说的是每个样本都可以用它最接近的k个邻居来代表.KNN算法的 ...

  7. Python编程:从入门到实践(选记)

    本文参考< Python 编程:从入门到实践>一书,作者: [ 美 ] Eric Matthes 第1章 起步 1.1     搭建python环境 在不同的操作系统中, Python 存 ...

  8. Python基础知识:类

    初级篇 面向过程:根据业务逻辑从上到下写垒代码 函数式:将某功能代码封装到函数中,日后便无需重复编写,仅调用函数即可 面向对象:对函数进行分类和封装,让开发“更快更好更强...” 1.面向对象三大特性 ...

  9. 《Python 数据分析》笔记——pandas

    Pandas pandas是一个流行的开源Python项目,其名称取panel data(面板数据)与Python data analysis(Python 数据分析)之意. pandas有两个重要的 ...

随机推荐

  1. xxx.pch(No such file or directory)

    今天在写一个组件的Demo,发现把一个现象. 我把stdafx.h和stdafx.cpp从工程删除了(本地也被我删除了).后来又想把它加回去,就用新的工程生成这两个文件.然后拷贝过来,增加到工程. 但 ...

  2. uwp 的个人名片

    xml code ---------------------------------------------------------------------- <Page x:Class=&qu ...

  3. Git撤销&回滚操作(git reset 和 get revert)

    转自:https://blog.csdn.net/asoar/article/details/84111841 git的工作流 工作区:即自己当前分支所修改的代码,git add xx 之前的!不包括 ...

  4. Vue.JS快速上手(组件生命周期)

    一.什么是组件 组成网页独立功能基本单元(片段), 复用.维护.性能, Vue.js中的组件就是一个Vue的实例,Vue中的组件包含data/methods/computed. 一个Vue.js的应用 ...

  5. mysql主要的两个索引Innodb和MyIASM。

    参考:https://www.cnblogs.com/xiaohaillong/p/6079551.html 1. a.Innodb引擎,Innodb引擎提供了对数据库ACID事务的支持.并且还提供了 ...

  6. rEFI引导Win10+Ubuntu14双系统

    公司买了一台Alienware 15 R2,安装双系统折腾死我了,现在记录一下安装过程. 硬盘: 256固态+1T机械 安装顺序: 先Windows,再Ubuntu 不同BIOS启动方式下安装系统 U ...

  7. Longhorn 云原生容器分布式存储 - Python Client

    内容来源于官方 Longhorn 1.1.2 英文技术手册. 系列 Longhorn 是什么? Longhorn 云原生容器分布式存储 - 设计架构和概念 Longhorn 云原生容器分布式存储 - ...

  8. vue 手写倒计时,样式需要自己调。( 亲测可用,就是没有样式 )

    先写一个 js 文件,这个文件是工具类文件,需要单独开一个js // 计算出时间戳的具体数据:比如将85400转化为 n天n时n分n秒 export function formateTimeStamp ...

  9. 洛谷P1083 借教室 题解

    题目 [NOIP2012 提高组] 借教室 题解 这道题是几周之前做到的一道题,本来不想讲的,因为这道题也是用到了二分答案的方法,这类题目之前已经发布过两篇题解了.但这道题还运用了差分数组这个思想,所 ...

  10. app自动化定位:UIautomation的用法

    UIautomation定位的优点: 速度比xpath定位快,UIautomation是Android的工作引擎 缺点: 没有idea提示 UIautomation使用方法: AndroidDrive ...