当前位置: 首页 > news >正文

python高效使用06_while_True和while_1哪个效率更高

总结:

  1. 从字节码上来看,两者应该是等效的。但是从实际测试中来看,while True可能比while 1稍微高效一些。
  2. 为什么会出现这种情况呢?在python2中True不是关键字,True会转化成1之后在进行对比,字节码会比1多,运行效率会慢。但是在python3中,True是关键字,两者的字节码是一样的,但是关键字经过优化,会比整数1效率高一些。

import dis

def run_1():
    while True:
        print("run_1")
        break

def run_2():
    while 1:
        print("run_2")
        break

dis.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 Bar


def test_func_time(n_rows, n_times=100):
    a = time.perf_counter()
    for j in range(n_times):
        for _i in range(n_rows):
            pass
    b = time.perf_counter()
    for_loop_time = (b - a) / n_times
    # 测试while_true
    a = time.perf_counter()
    for j in range(n_times):
        for _i in range(n_rows):
            while True:
                break
    b = time.perf_counter()
    while_true_time = (b - a) / n_times - for_loop_time
    # 测试while_1
    a = time.perf_counter()
    for j in range(n_times):
        for _i in range(n_rows):
            while 1:
                break
    b = time.perf_counter()
    while_1_time = (b - a) / n_times - for_loop_time
    value = 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")
    )

相关文章:

  • OpenCV形态学操作
  • Windows 10事件查看器
  • PINN求解一维burgers方程
  • 【AB-01】 AUTOSAR Builder软件安装
  • C++:从拷贝构造函数到深浅拷贝
  • 如何修改Windows系统Ollama模型存储位置
  • 第三章 组件(7)- 布局与Sections
  • Java——面向对象编程
  • 使用多态来替换条件语句
  • 【嵌入式Linux应用开发基础】进程间通信(3):共享内存
  • 遗传算法与深度学习实战系列,自动调优深度神经网络和机器学习的超参数
  • 完美转发使用
  • 现代任务调度系统架构深度解析——以TaskSchedulerController为核心的弹性任务管理方案
  • Spring AI集成Ollama调用本地大模型DeepSeek
  • Spring AOP
  • langflow中添加Siliconflow组件
  • 拆解微软CEO纳德拉战略蓝图:AI、量子计算、游戏革命如何改写未来规则!
  • DAY01-如何合理配置线程池的核心参数
  • 【机器学习】衡量线性回归算法最好的指标:R Squared
  • js中常用方法整理
  • 什么网站可以做注册任务/竞价托管哪家便宜
  • 株洲专业网站建设品牌/账号权重查询入口
  • jsp做的网站答辩问题/网站建设模板
  • 邢台做网站流程/seo怎么优化简述
  • 小程序网站做多大尺寸/直接进网站的浏览器
  • 做赌博网站的代理算赌博罪吗/正规营销培训