网站建设成本明细工具站seo
总结:
- 从字节码上来看,两者应该是等效的。但是从实际测试中来看,while True可能比while 1稍微高效一些。
- 为什么会出现这种情况呢?在python2中True不是关键字,True会转化成1之后在进行对比,字节码会比1多,运行效率会慢。但是在python3中,True是关键字,两者的字节码是一样的,但是关键字经过优化,会比整数1效率高一些。
import disdef run_1():while True:print("run_1")breakdef run_2():while 1:print("run_2")breakdis.dis(run_1)print("-------------------------------------")dis.dis(run_2)
效率对比代码:
import time
# import sys
# import numpy as np
# import pandas as pd
from pyecharts import options as opts
from pyecharts.charts import Bardef test_func_time(n_rows, n_times=100):a = time.perf_counter()for j in range(n_times):for _i in range(n_rows):passb = time.perf_counter()for_loop_time = (b - a) / n_times# 测试while_truea = time.perf_counter()for j in range(n_times):for _i in range(n_rows):while True:breakb = time.perf_counter()while_true_time = (b - a) / n_times - for_loop_time# 测试while_1a = time.perf_counter()for j in range(n_times):for _i in range(n_rows):while 1:breakb = time.perf_counter()while_1_time = (b - a) / n_times - for_loop_timevalue = round(while_true_time / while_1_time, 4)return [value, 1]if __name__ == '__main__':index_list = ["一千行", "一万行", "10万行", "100万行"]result = []for i in [1000, 10000, 100000, 1000000]:r1 = test_func_time(n_rows=i, n_times=1000)result.append(r1)c = (Bar().add_xaxis(index_list).add_yaxis("while True占用时间", [i[0] for i in result]).add_yaxis("while 1占用时间", [i[1] for i in result]).reversal_axis().set_series_opts(label_opts=opts.LabelOpts(position="right")).set_global_opts(title_opts=opts.TitleOpts(title="以while_1为基准,while_True效率"))# .render("d:/result/夏普率耗费时间对比.html").render("./while_True和while_1的效率对比.html"))