IceCream in Python
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
你可以仅仅使用icecream
去debug
,而使用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 print
和pretty print
进行区分。在你debug
完成后,搜索并删除掉ic
语句是更简单的。
删除ic debug
后,你的代码看起来更加地简洁。
IceCream in Python的更多相关文章
- (数据科学学习手札127)在Python中使用icecream实现高效debug
本文示例代码及文件已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 尽管有那么多花里胡哨的debug工具和方式 ...
- K-近邻算法python实现
内容主要来源于机器学习实战这本书.加上自己的理解. 1.KNN算法的简单描写叙述 K近期邻(k-Nearest Neighbor.KNN)分类算法能够说是最简单的机器学习算法了. 它採用測量不同特征值 ...
- python机器学习实战(一)
python机器学习实战(一) 版权声明:本文为博主原创文章,转载请指明转载地址 www.cnblogs.com/fydeblog/p/7140974.html 前言 这篇notebook是关于机器 ...
- k-近邻(KNN)算法改进约会网站的配对效果[Python]
使用Python实现k-近邻算法的一般流程为: 1.收集数据:提供文本文件 2.准备数据:使用Python解析文本文件,预处理 3.分析数据:可视化处理 4.训练算法:此步骤不适用与k——近邻算法 5 ...
- Python:从入门到实践--第九章-类--练习
#.餐馆:创建一个名为Restaurant的类,其方法_init_()设置两个属性:restaurant_name和cuisine_type. #创建一个名为describe_restaurant的方 ...
- Python机器学习笔记 K-近邻算法
K近邻(KNN,k-NearestNeighbor)分类算法是数据挖掘分类技术中最简单的方法之一. 所谓K最近邻,就是K个最近的邻居的意思,说的是每个样本都可以用它最接近的k个邻居来代表.KNN算法的 ...
- Python编程:从入门到实践(选记)
本文参考< Python 编程:从入门到实践>一书,作者: [ 美 ] Eric Matthes 第1章 起步 1.1 搭建python环境 在不同的操作系统中, Python 存 ...
- Python基础知识:类
初级篇 面向过程:根据业务逻辑从上到下写垒代码 函数式:将某功能代码封装到函数中,日后便无需重复编写,仅调用函数即可 面向对象:对函数进行分类和封装,让开发“更快更好更强...” 1.面向对象三大特性 ...
- 《Python 数据分析》笔记——pandas
Pandas pandas是一个流行的开源Python项目,其名称取panel data(面板数据)与Python data analysis(Python 数据分析)之意. pandas有两个重要的 ...
随机推荐
- 07.SpringMVC之静态资源
如何你的DispatcherServlet拦截 *.do这样的URL,就不存在访问不到静态资源的问题.如果你的DispatcherServlet拦截"/",拦截了所有的请求,同时对 ...
- mzy git学习,初识git(一)
GIT学习 git工作区.暂存区.本地库.远程库 工作区:实际上我们工作的地方,进行写代码或者文件的地方. 暂存区:我们执行了git add 操作之后,就会被提交到暂存区. 本地库:其实最后我们需要执 ...
- jQuery中的常用方法:empty()、each()、$.each()、$.trim()、focus()(二)
<!DOCTYPE html> <html> <head> <title>02_commonMethod.html</title> < ...
- 关于ByteArrayInputStream和ByteArrayOutputStream
package stream.byte_; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; imp ...
- 面试必问题:JS防抖与节流
摘要:防抖与节流可谓是面试常见,其实很好理解,下面带你分分钟了解防抖与节流的基本思想与写法~ 本文分享自华为云社区<JS防抖与节流快速了解与应用>,作者:北极光之夜. . 一.速识防抖: ...
- SpringSecurity入门
基础 spring security的底层就是一个过滤器链 ExceptionTranslationFilter是一个异常过滤器,用来处理认证授权过程中的异常 UseranmePasswordAuth ...
- Nginx+Tomcat+Memcached实现session共享
实验环境: server1:nginx tomcat memcached server2:tomcat memcached Session是指一个终端用户与交互系统进行通信的时间间隔,通常指从注册进入 ...
- Hopper Disassembler系列之Sublime Text 3 爆破
https://www.52pojie.cn/thread-793069-1-1.html 当参数少于7个时, 参数从左到右放入寄存器: rdi, rsi, rdx, rcx, r8, r9. 当参数 ...
- uniapp H5 打包并部署到 nginx
个人也是了百度了挺久的了,花费的时间( 俩个半小时 ) uniapp 的打包首先要先配置,配置好了才能去进行打包,如图所示. 这只是第一步. 注意: 1.运行基础路径最好用 ./ ,如果配置了其他请自 ...
- vue+Element-ui 的 el-cascader 做高德地图的省市区三级联动并且是异步加载,点击省市区跳转到对应的区(地图可以通过后端返回的点进行标点)
// 完整版高德地图,可以复制代码直接使用 index.html <script type="text/javascript" src="https://webap ...