11

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

1 回答 1

20

直接来自文档

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

同样来自文档:

total: int, 可选的。

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

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

例子

如果我们提供一个没有参数的生成器(没有 a 的东西__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]

但是,如果我们使用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还有一整套附加参数,您可以在此处找到

于 2018-05-20T02:33:37.433 回答