写在前面
算法组小伙伴今天安利我这个插件,我来看看。
本文为个人学习练手之作,欢迎讨论。
1.print和icecream的关联和区别
这玩意你离开不了,个人常用的几个
def personaluse():
name ="ergouzi"
age = "18"
print("here is name :",name)
print("here is age :{}".format(age))
print(f"here is all infor: {name},{age}")
if __name__ == "__main__":
personaluse()
这么多年了,我早已经喜欢了print,
从最开始c的printf
到python的print。
你今天同我讲要换其他的?(不是)
print存在几个问题:
1.调试过程中主要添加print,观察信息和数据的流转过程。然后正式发版记得要注释或者删掉,工作量大和影响美观。
2.打印多个变量必须手动格式化输出以增强其可读性。比如:对打印行号、函数名称及其输入等,这会增加了编写又长、又多的print()
语句的复杂性。
。。。。越说我越觉得print大法好。
那我本着学习的心态,来看看icecream
2.IceCream-冰淇淋
#直接使用pip安装icecream库
pip install icecream
#导入ic模块
from icecream import ic
1.ic输出和print的区别。
class MyIcecream:
def __init__(self) -> None:
pass
def baseuse(self):
var_1 = 1
var_2 = 2
ic(var_1)
ic(var_2)
####输出结果
ic| var_1: 1
ic| var_2: 2
2. 查看函数名、入参和返回结果:
class MyIcecream:
def __init__(self) -> None:
pass
def baseuse(self):
var_1 = 1
var_2 = 2
ic(var_1)
ic(var_2)
def moreinfor(self,num):
return num + 5
if __name__ == "__main__":
#personaluse()
myic = MyIcecream()
myic.baseuse()
ic( myic.moreinfor(5))
ic| myic.moreinfor(5): 10
3.牛的来了。ic可以用在判断语句中,查询判断状态。
看例子有点吓人,具体文件名称,时间,行数,都打印出来了。
from icecream import ic
class MyIcecream:
def __init__(self) -> None:
pass
def baseuse(self):
var_1 = 1
var_2 = 2
ic(var_1)
ic(var_2)
def moreinfor(self,num):
return num + 5
def useinjug(self, mystatus):
if mystatus:
###your code
ic()
else:
###your code
ic()
def personaluse():
name ="ergouzi"
age = "18"
print("here is name :",name)
print("here is age :{}".format(age))
print(f"here is all infor: {name},{age}")
if __name__ == "__main__":
#personaluse()
myic = MyIcecream()
# myic.baseuse()
# ic( myic.moreinfor(5))
myic.useinjug(True)
ic| iceprint.py:19 in useinjug() at 13:35:32.557
4.自定义参数
ic.configureOutput(prefix='Old bro use| -> ')
ic("here is information!")
#output
Old bro use| -> 'here is information!'
在这个里面有用到ic.configureOutput()
源码如下:(2022年12月7日)
def configureOutput(self, prefix=_absent, outputFunction=_absent,
argToStringFunction=_absent, includeContext=_absent):
if prefix is not _absent:
self.prefix = prefix
if outputFunction is not _absent:
self.outputFunction = outputFunction
if argToStringFunction is not _absent:
self.argToStringFunction = argToStringFunction
if includeContext is not _absent:
self.includeContext = includeContext
其中参数如下:
prefix,自定义输出前缀
outputFunction,更改输出函数
argToStringFunction,自定义参数序列化字符串
includeContext,显示文件名、代码行、函数信息
你可以选择把时间打在前面,
import time
from datetime import datetime
def time_flag():
return f'Now time is:{datetime.now()}|>'
ic.configureOutput(prefix=time_flag)
for i in range(3):
time.sleep(2)
ic("The infor is 歪比巴卜")
输出结果为:
Now time is:2022-12-07 13:58:30.844330|>'The infor is 歪比巴卜'
Now time is:2022-12-07 13:58:33.331548|>'The infor is 歪比巴卜'
Now time is:2022-12-07 13:58:35.333918|>'The infor is 歪比巴卜'
5.不想看到打印,可以使用
ic.disable() #停止ic打印
is.enable() #开始ic打印
因为可以区分调试打印和print打印,因此搜索和删除所有ic调试语句非常轻松:
可以使用ctrl+f全局搜索:ic
或者使用一键选择、修改多个相同变量、符号、值:ctrl+shift+alt+j,全局选中对应的ic打印代码删除。
大家可以试试