美文网首页
答应我以后不要再用print打印了,冰淇淋来了!

答应我以后不要再用print打印了,冰淇淋来了!

作者: 途途途途 | 来源:发表于2021-08-15 08:58 被阅读0次

使用print来调试代码,你会发现查看终端上的许多行输出,然后试图找出每个输出属于哪些代码,这是一个非常繁琐的过程。

def add(a, b):

returna + b

print(add(10,8))

print(add(221,91))

print(add(110,78))

print(add(28,14))

print(add(159,76))

print(add(65,4631))

'''

18

312

188

42

235

4696

'''

这些输出中哪一个是 159+76?这些输出中哪一个是 221 + 91?

如果数据很少可能还不是那么糟糕,但是如果有超过5个不同的输出呢?

试图找到负责输出的源代码可能会非常耗时。

当然,可以尝试在print语句中添加文本来进行标记,以便更容易地理解:

def add(a, b):

print(f'{a}'+'+'+f'{b}:')

returna + b

print(add(10,8))

print(add(221,91))

print(add(110,78))

print(add(28,14))

print(add(159,76))

'''

10+8:

18

221+91:

312

110+78:

188

28+14:

42

159+76:

235

65+4631:

4696

'''

但同样,输出文本也会非常耗时。是否有一种方法可以打印负责输出的代码,而不需要输出额外的文本呢?

这就是冰淇淋派上用场的时候了!

什么是冰淇淋?

Icecream是一个Python库,可通过最少的代码使打印调试更具可读性。

使用下面的代码安装冰淇淋

pip install icecream

然后,让我们按如下方式导入库

from icecream import ic

访问函数

依旧使用上述的加法函数作为测试

from icecream impor tic

defadd(a, b):

returna + b

ic(add(10,8))

ic(add(221,91))

ic(add(110,78))

ic(add(28,14))

ic(add(159,76))

ic(add(65,4631))

'''

ic| add(10, 8): 18

ic| add(221, 91): 312

ic| add(110, 78): 188

ic| add(28, 14): 42

ic| add(159, 76): 235

ic| add(65, 4631): 4696

'''

我们从未在 ic() 函数中指定任何内容,但它会自动输出函数名和参数以及结果。因此,我们不必再手动添加"简要描述"。

使用ic的好处,我们不仅可以看到输出,还可以看到函数及其参数!多么方便!

访问字典

我定义了一个字典,并尝试从它的键访问其中的值。Ice Cream 输出字典的变量名和我正在访问的键。

from icecream import ic

my_dict = {

'姓名':'张三',

'性别':'男',

'年龄':'20'

}

print(my_dict['年龄'])

ic(my_dict['年龄'])

'''

20

ic| my_dict['年龄']: '20'

'''

访问对象

from icecream import ic

classsinger():

lin ='江南'

xu ='浅唱'

LOL =True

sin = singer()

print(sin.lin)

print(sin.xu)

print(sin.LOL)

ic(sin.lin)

ic(sin.xu)

ic(sin.LOL)

'''

江南

浅唱

True

ic| sin.lin: '江南'

ic| sin.xu: '浅唱'

ic| sin.LOL: True

'''

精准定位

我们可以通过ic() 精确的输出业务代码的位置。

尽管if else语句目前什么也不做,但ic()函数仍然告诉我们调用它的位置和时间,以及行号。

from icecream import ic

deflocation(age):

if0< age <=18:

# bulabulabula......

ic()

elif18< age <=60:

# bulabulabula......

ic()

else:

# bulabulabula......

ic()

if__name__ =='__main__':

location(10)

location(56)

location(88)

'''

ic| test.py:5 in location() at 17:42:28.523

ic| test.py:8 in location() at 17:42:28.525

ic| test.py:11 in location() at 17:42:28.527

'''

冰淇淋的默认输出格式是,主要参数如下:

包括前缀:ic

文件名:test.py

代码位置:5, 8, 11行

函数:location()

ic| test.py:5inlocation() at17:42:28.523

ic| test.py:8inlocation() at17:42:28.525

ic| test.py:11inlocation() at17:42:28.527

自定义输出

from icecream import ic

ic.configureOutput('kobe的四则运算:')

ic(8+8)

ic(18-8)

'''

kobe的四则运算:8+8: 16

kobe的四则运算:18-8: 10

'''

输出时间

有时候,进行代码输出调试的时候

需要知道代码运行该位置时的精确时间

我们可以自定义icecream来实现带时间的输出

from icecream import ic

fromdatetimeimportdatetime

# 将当前时间配置进ic里

ic.configureOutput(prefix=str(datetime.now())+'|')

ic(8+8)

ic(18-8)

'''

2021-07-26 18:37:46.601529|8+8: 16

2021-07-26 18:37:46.601529|18-8: 10

'''

相关文章

网友评论

      本文标题:答应我以后不要再用print打印了,冰淇淋来了!

      本文链接:https://www.haomeiwen.com/subject/lcaybltx.html