查看原文
其他

【文末送书】一个进度条还能玩这么花?

未闻Code 2024-03-13

The following article is from Crossin的编程教室 Author Crossin先生

比如像这样一个1万乘1万的两层循环:

X = 10000for i in range(X): for j in range(X):        k = j * iprint('\n完成!')

如果就这么直接运行,那么很可能让你陷入未知的等待。你不知道程序执行到哪儿了,还要执行多久,以及是不是还在正常运行……

这时候,

白银选手知道在循环里加上print,但直接输出会让你的控制台瞬间爆炸

X = 10000for i in range(X): for j in range(X): k = j * i    print(i)print('\n完成!')

黄金选手会用'\r'字符让输出保持在同一行

X = 10000for i in range(X): for j in range(X): k = j * i print(f'{i+1} / {X}', end='\r')print('\n完成!')

钻石选手甚至给你手搓一个进度条出来

X = 10000for i in range(X): for j in range(X): k = j * i print('进度', f'|{"█"*((i+1)*50//X):50}|', f'{(i+1)*100//X}%', end='\r')print('\n完成!')

但真正的王者……则会直接用现成的库

progress

progress就是一个简单的第三方进度条模块。你只需要在代码中创建一个Bar对象,设定好长度,并在循环中更新它,就可以轻松得到一个进度条。

from progress.bar import BarX = 10000with Bar('进度', max=X) as bar: for i in range(X): for j in range(X): k = j * i bar.next()print('\n完成!')

progress模块提供了多种进度条样式供你选择。

同时你也可以通过参数修改进度条的填充字符和描述文本。

tqdm

更加为人所熟知的进度条模块是tqdm(天桥大妈?)。这个词据说是阿拉伯语“进度”的意思,也是西班牙语“我好爱你”的缩写。(作者挺浪漫啊)

tqdm的使用更简单,只要给循环的迭代对象加上tqdm就行了。

或者直接用模块中的trange替代原本的range方法。都不用你在循环中增加代码。

from tqdm import tqdm, trange
X = 10000for i in tqdm(range(X)):# for i in trange(X): for j in range(X): k = j * iprint('完成!')

tqdm没搞太多花哨的样式,但对各种开发环境的支持很好,比如改成 tqdm.rich,就可以在控制台下得到一个彩色的进度条

改成 tqdm.notebook,可以优化在 jupyter notebook 中的显示

加上tk,则是一个基于tkinter的进度条弹窗

那有人要说了,“我想要的进度条不一定都是用在循环代码上呀”。那也简单,直接定义一个tqdm对象,然后在代码中手动更新进度。

from tqdm import tqdmfrom time import sleepbar = tqdm(total=100)bar.set_description('采集数据')sleep(0.5)bar.update(10)bar.set_description('分析数据')sleep(0.5)bar.update(89)bar.set_description('展示数据')sleep(5)bar.update(1)bar.close()print('完成!')

你现在知道,为什么很多软件都会卡在99%的地方了吧?

Alive Progress

如果你觉得这个进度条不够彰显你代码的独特气质,那么还可以看看Alive Progress这个模块。

它的写法和前面的progress很像,看上去平平无奇:

from alive_progress import alive_bar
X = 10000with alive_bar(X) as bar: for i in range(X): for j in range(X): k = j * i bar()print('完成!')

但它的动态效果一定会让你惊艳!

好了,以上就是Python中几种常见的进度条写法,你喜欢哪一种呢?


感谢北大出版社赞助的《AI绘画实战:Midjourney从新手到高手》、《AI时代Python金融大数据分析实战:ChatGPT让金融大数据分析插上翅膀》。两套书各4本,在这篇文章下面留言,我会选出8个人赠送。仅限2024年2月25日之前关注本公众号的同学参加,仅限之前在非送书文章下有评论的同学参加。

Midjourney完全教程:从关键提示到效果出图,从基础理论到实战应用,从工具操作到创意实现,一本书轻松玩转AI绘画,领略无限艺术可能。

金融大数据分析新模式:一本专注于帮助金融大数据分析师在AI时代实现晋级、提高效率的图书。书中介绍了如何使用 ChatGPT 来完成金融大数据分析的各个环节,并通过实战案例展示了ChatGPT在实际金融大数据分析中的应用方法。

继续滑动看下一个
向上滑动看下一个

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存