使用 tqdm 进度条显示当前项目

Dus*_*yte 15 python progress-bar tqdm

我想将当前项目(字符串表示形式)添加到 tqdm 进度栏。

\n

这是没有任何附加文本的代码(非常简短):

\n
from tqdm import tqdm\nimport time\n\nanimals = ["cat", "dog", "bird", "fish", "insect"]\n\nfor animal in tqdm(animals):\n    time.sleep(1)\n
Run Code Online (Sandbox Code Playgroud)\n
80%|\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88  | 4/5 [00:04<00:01,  1.14s/it]\n
Run Code Online (Sandbox Code Playgroud)\n

以下是显示正在处理的项目(此处为动物名称)的两种方法:

\n
80%|\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88  | 4/5 [00:04<00:01,  1.14s/it]\n
Run Code Online (Sandbox Code Playgroud)\n
40%|\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88      | 2/5 [00:02<00:04,  1.46s/it, bird]\n
Run Code Online (Sandbox Code Playgroud)\n

\n
progress = tqdm(animals)\nfor animal in progress:\n    progress.set_postfix_str(animal)\n    time.sleep(1)\n
Run Code Online (Sandbox Code Playgroud)\n
60%|\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88    | 3/5 [00:03<00:02,  1.04s/it, fish]\n
Run Code Online (Sandbox Code Playgroud)\n

这两种方法都添加了相当多的额外代码,并且需要指定进度条对象。我还没有找到任何更简单的方法来实现这一目标。我是否错过了 tqdm 提供的一些东西?

\n

特别是,我一直在寻找一种方法来告诉 tqdm 输出__str__()其迭代器返回的项目的字符串(使用 say )。例如,

\n
40%|\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88      | 2/5 [00:02<00:04,  1.46s/it, bird]\n
Run Code Online (Sandbox Code Playgroud)\n

Ana*_*eev 8

看起来节省一行的唯一方法是使用 Python 3.8 中添加的海象运算符:

for animal in (pbar:= tqdm(animals)) :
    pbar.set_postfix_str(animal)
    time.sleep(1)
Run Code Online (Sandbox Code Playgroud)

100% 5/5 [00:05<00:00, 1.01s/it, 昆虫]