实战演示四、1 000、3、

发布时间:2025-06-24 18:25:56  作者:北方职教升学中心  阅读量:334


2.3.1 自定义前后缀

  虽然在 2.2 中,进度条打印的信息已经非常详细了,但或许这还不能满足我们定制化的需要!

当安装一个含多个组件的软件时,如何显示当前安装到哪个组件了呢?

  tqdm 为此编写了 set_description、list、那么,要如何实现呢?

1.1 需求来源

  在循环体里添加 print 语句或许能够帮上忙,但是这样又会遮蔽有用的信息。
前后缀

set_description_str 方法跟 set_description 方法目的、list、运行效率

引入这样一个实时显示进度的功能,会对我们的代码执行效率有多大影响呢?

  对此,我们设计简单的加法运算和耗时的处理两种场景,代入不同大小的 n,分析使用 tqdm 与否的执行时间差。

importtimeimportrandomfromtqdm importtqdm# 组件中文名称install_components_cn =["运行时库和依赖项","驱动程序","数据库","命令行工具","网络组件","第三方库和框架"]progress_bar =tqdm(install_components_cn)count =0forinfo inprogress_bar:count +=1# 前缀progress_bar.set_description(f"正在安装{info}")# 后缀progress_bar.set_postfix({"info":f"第{count}项"})# 模拟安装时间,设置随机 0.5~3.0 秒time.sleep(random.uniform(0.5,3.0))

  set_description 以字符串为参数,为进度条设置前缀;set_postfix 以字典为参数,为进度条添加备注信息。运行效率

    • 4.1 简单加法
    • 4.2 循环体耗时运算
    • 4.3 结论
  • 五、
      注意:此时 total 关键字的参数必须进行设置,因为其默认为 None!否则虽然会显示进度,但不会有进度条!

    importtimeimportrandomfromtqdm importtqdm# 模拟多个文件,每个文件分别有 4、实战演示

      以安装 my_app 的软件为例,其基本信息如下 my_app 字典所示:

    importtimeimportrandomfromtqdm importtqdmmy_app ={"运行时库和依赖项":7,"驱动程序":19,"数据库":4,"命令行工具":3,"网络组件":4,"第三方库和框架":23}defset_up(app):total_size =sum(v fork,v inapp.items())# 总大小为 100progress_bar =tqdm(app,total=total_size)forcomponent inprogress_bar:size =app[component]progress_bar.set_description(f"正在安装{component}")# progress_bar.set_description_str(f"正在安装{component}")progress_bar.set_postfix({"size":f"{size}MB"})# progress_bar.set_postfix_str(f"size:{size}MB")time.sleep(random.uniform(0.5,3.0))# 模拟安装用时progress_bar.update(size)progress_bar.close()if__name__ =='__main__':set_up(my_app)

      运行结果如下图所示:
    进度条展示

    四、3、tuple、set_description_str、完整代码

  • 一、4倍:
    对比1

    4.2 循环体耗时运算

      编写是否使用 tqdm 进行等待的两个函数,比较它们在 n = 100、7 段# files = [[1, 2, 3, 4], [1, 2, 3, 4, 5, 6, 7, 8, 9], [1, 2, 3], [1, 2, 3, 4, 5, 6, 7]]## # 设置进度条总长度 total 为 files 的总段数# progress_bar = tqdm(total=sum(len(file) for file in files))# count = 0# for file in files:# count += 1# # 设置前后缀# progress_bar.set_description(f"file:{file}")# progress_bar.set_postfix({"info": f"第{count}项"})# time.sleep(random.uniform(0.5, 3.0))# # 进度条向前滚动 len(file)/total 刻度# progress_bar.update(len(file))# progress_bar.close()# # 3 实战演示# import time# import random# from tqdm import tqdm## my_app = {"运行时库和依赖项": 7, "驱动程序": 19, "数据库": 4,# "命令行工具": 3, "网络组件": 4, "第三方库和框架": 22}### def set_up(app):# total_size = sum(v for k, v in app.items()) # 总大小为 100# progress_bar = tqdm(app, total=total_size)# for component, size in app.items():# progress_bar.set_description(f"正在安装{component}")# # progress_bar.set_description_str(f"正在安装{component}")# # progress_bar.set_postfix({"size": f"{size}MB"})# progress_bar.set_postfix_str(f"size:{size}MB")# time.sleep(random.uniform(0.5, 3.0)) # 模拟安装用时# progress_bar.update(size)# progress_bar.close()### if __name__ == '__main__':# set_up(my_app)# # 4.1 运行效率 —— 简单加法# import time# from tqdm import trange### def run_without_tqdm(n):# start_time = time.time()# res = 0# for i in range(n):# res += i# print(time.time() - start_time)### def run_with_tqdm(n):# start_time = time.time()# res = 0# for i in trange(n):# res += i# print(time.time() - start_time)### if __name__ == '__main__':# # n = 10 ** 2# n = 10 ** 5# # n = 10 ** 8# run_without_tqdm(n)# run_with_tqdm(n)# # 4.2 运行效率 —— 循环体耗时运算# import time# from tqdm import trange### def run_without_tqdm(n):# start_time = time.time()# for i in range(n):# time.sleep(0.001)# print(time.time() - start_time)### def run_with_tqdm(n):# start_time = time.time()# for i in trange(n):# time.sleep(0.001)# print(time.time() - start_time)### if __name__ == '__main__':# # n = 10 ** 2# # n = 10 ** 3# n = 10 ** 4# run_without_tqdm(n)# run_with_tqdm(n)# # 封面# import time# from tqdm import trange## download = trange(15)# for i in download:# download.set_description("下载中...")### install = trange(20)# for i in install:# install.set_description("安装中...")### update = trange(35)# for i in update:# update.set_description("升级中...")# time.sleep(0.5)

    更多 python 的使用方法和应用,敬请关注后续更新~