tqdm 的总参数有什么作用?

Min*_*t.K 7 python tqdm

两者有什么区别?tqdm 环绕任何可迭代对象。但是我不确定 tqdm 在给定两个参数时如何运行。

# train_ids = list
elements = ('a', 'b', 'c')
for count, ele in tqdm(enumerate(elements)):
    print(count, i)
# two arguments
for count, ele in tqdm(enumerate(elements), total=len(train_ids)):
    print(count, i)
Run Code Online (Sandbox Code Playgroud)

use*_*203 10

直接来自文档

如果提供了可选变量 total(或带有 len() 的可迭代对象),则会显示预测统计信息。

同样来自文档:

total: int,可选

预期的迭代次数。如果(默认值:无),则尽可能使用 len(iterable)。作为最后的手段,只显示基本的进度统计信息(没有 ETA,没有进度条)。如果 gui 为 True 并且此参数需要后续更新,请指定初始的任意大正整数,例如 int(9e9)。

当您total作为参数提供给 时tqdm,您将估计代码应该运行多少迭代,因此它将为您提供预测信息(即使您提供的迭代没有长度)。

例子

如果我们提供的发电机(东西没有__len__),以tqdm 没有一个total说法,我们没有得到一个进度条,我们只是得到经过时间:

no_len = (i for i in range(50))

for i in tqdm(no_len):
    time.sleep(0.1)

# Result
19it [00:01,  9.68it/s]
Run Code Online (Sandbox Code Playgroud)

但是,如果我们使用total参数来给出预期的迭代,tqdm现在将估计进度:

for i in tqdm(no_len, total=49):
    time.sleep(0.1)

# Result
94%|?????????????????????????????????????????  | 46/49 [00:04<00:00,  9.72it/s
Run Code Online (Sandbox Code Playgroud)

除了total参数之外,tqdm还有一整套附加参数,您可以在此处找到

  • 该生成器中实际上有 50 个元素,因此 `total=50` (3认同)