Python的输出print语句是否会显著降低运行速度?

先说结论,会,并且运行时间是一般赋值语句的200倍左右,这个知乎回答是我昨天写的,内容是相同的。

首先既然是探讨输出是否影响程序运行时间,那肯定就要控制是否输出作为唯一变化的参量,并获取在不同规模下的数据量的影响。

以python为例,代码如下:

import datetime
import numpy as np

fn = open('/exports/hhr346/run.txt', 'w')
for time in np.arange(1, 50):
	start = datetime.datetime.now()
	start_second = start.second
	start_microsecond = start.microsecond
	for a in range(1000*time):
		a += 1
		#print('a is ', a)

	end = datetime.datetime.now()
	end_second = end.second
	end_microsecond = end.microsecond
	delta = (end_second - start_second)*1000000 + (end_microsecond - start_microsecond)
	fn.write('{}'.format(delta))
	fn.write('\n')

输出a的部分为控制是否输出的语句,前后的不同仅为是否注释

导出写入的文本文件来画图

二者时间比较

从结果上可以看到,二者都大致是线性关系,不同的是选择输出时,结果的随机性更大,但是线性关系是显著的;选择print时,单次循环的时间增量在同等条件下是不print的200倍,所以print对于运行时间的影响还是相当大的。

后续可以去探究打印字符的多少对运行时间的影响程度,多打印字符是否时间就会更多?不同语言是否影响不同?

实际上这部分探究只能算是一种粗略的探究,程序还存在一些问题,因为获取的是微秒和秒,所以运行时不要跨分钟,否则就会出现离谱的负数;还有就是使用的datetime 返回的时间实际上和系统的性能和延迟有关,所以实际上精度并不太高,并且有些时候也可以观察到输出并不是线性增长的。

并且在验证的过程应用了获取时间和写入文件这样“多余”的操作(还有导入模块影响的时间),必然会对总体运行时间造成影响,所以也许更好的方法是一个个用 time 命令来获取每次运行的时间?(bushi

感觉这个问题还是很有趣的,就在博客园里也记录一下。

posted @   hhr346  阅读(956)  评论(3编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示