tqdm的total参数有什么作用?

What does tqdm's total parameter do?

两者有什么区别? 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)

Straight from the documentation:

If the optional variable total (or an iterable with len()) is provided, predictive stats are displayed.

也来自文档:

total : int, optional .

The number of expected iterations. If (default: None), len(iterable) is used if possible. As a last resort, only basic progress statistics are displayed (no ETA, no progressbar). If gui is True and this parameter needs subsequent updating, specify an initial arbitrary large positive integer, e.g. int(9e9).

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

例子

如果我们向 tqdm 提供生成器(没有 __len__ 的东西)而没有 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]

但是,如果我们使用 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

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

中找到