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
感觉这个问题还是很有趣的,就在博客园里也记录一下。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)