实战演示四、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 与否的执行时间差。
import timeimport randomfrom tqdm import tqdminstall_components_cn = [ "运行时库和依赖项" , "驱动程序" , "数据库" , "命令行工具" , "网络组件" , "第三方库和框架" ] progress_bar = tqdm( install_components_cn) count = 0 for info in progress_bar: count += 1 progress_bar. set_description( f"正在安装 { info} " ) progress_bar. set_postfix( { "info" : f"第 { count} 项" } ) time. sleep( random. uniform( 0.5 , 3.0 ) )
set_description 以字符串为参数,为进度条设置前缀;set_postfix 以字典为参数,为进度条添加备注信息。运行效率
4.1 简单加法 4.2 循环体耗时运算 4.3 结论 五、 注意:此时 total 关键字的参数必须进行设置,因为其默认为 None!否则虽然会显示进度,但不会有进度条! import timeimport randomfrom tqdm import tqdm
一、4倍:4.2 循环体耗时运算 编写是否使用 tqdm 进行等待的两个函数,比较它们在 n = 100、7 段
更多 python 的使用方法和应用,敬请关注后续更新~
9、
可见,装饰前后,二者都是可迭代的,区别在于后者会自动显示进度条! 注意:tqdm.std.tqdm 类型只能遍历一次,不能重复使用!
2.2 快速上手 2.2.1 trange trange 函数是 tqdm 中最常用的函数,从其源码中可以看出,trange 是 tqdm 对 range 类型数据的装饰:
def trange ( * args, ** kwargs) : """Shortcut for tqdm(range(*args), **kwargs).""" return tqdm( range ( * args) , ** kwargs)
使用 trange 可以 替代 range 进行迭代,并显示进度条:
import tqdmimport timefor i in tqdm. trange( 20 ) : pass time. sleep( 0.5 )
2.2.2 其他 Iterable 除了对 range 类型,tqdm 还能装饰所有常见的可迭代类型:str、set、1倍:
4.3 结论 从 1.1 和 4.2 的对比结果中,不难看出,使用 tqdm 会带来一定的额外消耗。100 000、用法一致; set_postfix_str 方法跟 set_postfix 方法目标一致,但前者传入字符串,后者传入字典。set_postfix_str 等常用函数,在此仅以 set_description 和 set_postfix 为例进行演示。13倍、
那么,如何设置进度条前进的刻度跟文件大小成正相关呢?
这时候,不能直接使用 tqdm 函数 对工作流进行包装,而应该使用 total 关键字设置总刻度的长度,再用 update 方法让进度条前进一定的刻度。dict ……
import tqdma = "abcdefg" b = ( 1 , 2 , 3 , 4 , 5 ) c = [ 'a' , 'b' , 'c' , 'd' , 'e' , 'f' , 'g' ] d = { 'apple' , 'banana' , 'cherry' , 'date' } e = { 'a' : "Apple" , 'b' : "Banana" , 'c' : "Cherry" , 'd' : "Date" } for i in tqdm. tqdm( a) : pass for i in tqdm. tqdm( b) : pass for i in tqdm. tqdm( c) : pass for i in tqdm. tqdm( d) : pass for i in tqdm. tqdm( e) : pass
这些 Iterable 类型都能用于创建进度条:
2.3 定制化显示 在使用设置函数前,应特意将 tqdm 对象命名为新的变量(如 “progress_bar ”),以便调用函数使用。代码解析
2.1 原理简介 在 tqdm 库 中,可以使用 tqdm 函数 对可迭代类型(Iterable)数据进行装饰,返回 tqdm.std.tqdm 类型 的可迭代数据(Iterable)。前言
二、
全文一览 一、10 000 时各自的运行时间: import timefrom tqdm import trangedef 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 ** 4 run_without_tqdm( n) run_with_tqdm( n)
如下图,带 tqdm 的运行时间是原函数的2倍、dict
能不能设计一个类似下载安装进度条那样的东西,来简洁直观地展示进度呢?
这也正是 tqdm 要实现的目标!
1.2 tqdm 快速安装 由于 tqdm 不是 Python 的内置库,在使用前需要先进行安装。但当循环足够多 或者循环体耗时较长 时,tqdm 对效率的影响可以忽略不计!
五、set、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 ] ] progress_bar = tqdm( total= sum ( len ( file ) for file in files) ) count = 0 for file in files: count += 1 time. sleep( random. uniform( 0.5 , 3.0 ) ) progress_bar. update( len ( file ) ) progress_bar. close( ) “progress_bar.close()” 强烈推荐保留,其作用在于确保进度条能够达到 100% 并完成显示! 在更新进度条的时候,我们同样还可以设置前后缀!
将 tqdm 的 total 关键字设置为 1,然后将 update 的参数设置为 len(file) / sum(len(file) for file in files),仍能达到相同的效果。代码解析
2.1 原理简介 2.2 快速上手 2.2.1 trange 2.2.2 其他 Iterable 2.3 定制化显示 三、三、100 000 000 时各自的运行时间: import timefrom tqdm import trangedef 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 ** 5 run_without_tqdm( n) run_with_tqdm( n)
如下图所示,带 tqdm 的运行时间是原函数的无数倍、1倍、
4.1 简单加法 编写是否使用 tqdm 进行求和的两个函数,比较它们在 n = 100、后缀
pip install tqdm - i https: // pypi. tuna. tsinghua. edu. cn/ simple
二、完整代码 import tqdmimport timefor i in tqdm. trange( 20 ) : pass time. sleep( 0.5 )
四、1 000、3、