相信大部分学习Python的人肯定会使用内置函数print()来调试代码。那么在一个大项目中,如果你也使用print调试你的Python代码,你会发现你的终端有多个输出。然后你要区分哪一行代码是每一行输出的结果。例如,运行以下程序。num1=30num2=40print(num1)print(num2)输出结果。3040这些输出中的哪一个是num1?num2又是哪一个?找到两个输出可能不是很困难,但如果有超过五个不同的输出怎么办?试图找到与输出相关联的代码可能非常耗时。当然你可以在打印语句中加入文字,使其更容易理解:num1=30num2=40print("num1"num1)print("num2"num1)输出结果。num130num240的结果很容易理解,但是写相关信息需要时间。这时候,就到了“Icecream”的上场时间啦~01.Icecream是什么?Icecream是Python的第三方库,可以用最少的代码让打印和调试更清晰。使用pip安装Icecream库。在pipinstallicecream旁边,让我们通过打印Python函数的输出来尝试一下。fromicecreamiimporticdefplus_five(num):returnnum+5ic(plus_five(4))ic(plus_five(5))输出结果如下。ic|plus_five(4):9ic|plus_five(5):10通过使用icecream,我们不仅可以看到函数输出,还可以看到函数及其参数!02.查看执行如果想找出代码执行到哪里,可以通过执行以下操作找到执行了哪条语句。defhello(user:bool):ifuser:print("I'muser")else:print("I'mnotuser")hello(user=True)输出结果。I'muser通过使用icecream可以在没有冗余文本信息的情况下轻松完成上述操作。fromicecreamimporticdefhello(user:bool):ifuser:ic()else:ic()hello(user=True)输出结果如下。ic|ice_1.py:5inhello()at02:34:41.391从输出结果来看,函数hello中第5行的代码已经执行,但是第7行的代码还没有执行。03.自定义前缀如果想在打印语句中插入自定义前缀(比如代码执行时间),icecream也可以实现。fromdatetimeimportdatetimefromicecreamiimporticimporttimefromdatetimeimportdatetimedeftime_format():returnf'{datetime.now()}|>'ic.configureOutput(prefix=time_format)for_inrange(3):time.sleep(1)ic('Hello')输出结果如下。2021-01-2410:38:23.509304|>'Hello'2021-01-2410:38:24.545628|>'Hello'2021-01-2410:38:25.550777|>'Hello'可以看到执行时间代码,就在输出之前。04.获取更多信息除了了解与输出相关的代码外,您可能还想了解代码执行行和代码文件。在ic.configureOutput()中,将includeecontext的参数值设置为True。fromicecreamiimporticdefplus_five(num):returnnum+5ic.configureOutput(includeContext=True)ic(plus_five(4))ic(plus_five(5))输出结果如下。ic|ice_test.py:7in
