使 tqdm 等函数在 Python 中接受不同类型的参数
Making tqdm and the like functions accept different types of parameters in Python
这不是特定于 tqdm 的,而是关于将参数传递给 Python 中的函数的一般问题。我想实现以下功能,而不必在 tqdm 下复制整个块。任何帮助将不胜感激。
if flag == True:
with tqdm(dataloader, total=args.num_train_batches) as pbar:
else:
with tqdm(dataloader) as pbar:
更具体地说,我可以这样传递参数吗?
if flag == True:
tqdm_args = dataloader, total=args.num_train_batches
else:
tqdm_args = dataloader
with tqdm(tqdm_args) as pbar:
其实做起来还挺简单的,看来他们在做Python的时候就想到了这一点。您可以使用 Python 的 ternary operator 来执行此操作,将上面的内容压缩到一行:
with tqdm(dataloader, total=args.num_train_batches if flag else None) as pbar:
# ...
编辑: 用您提到的首选方法回答,是的。这也是可能的。如果您将这些参数放入列表(或字典,如果您有关键字参数),然后在调用函数时在列表名称前面放置 *
(或 **
用于字典),它将列表解压缩为一组参数。
使用列表的示例:
if flag: # if flag is a boolean, putting "== True" does nothing
tqdm_args = [dataloader, None, args.num_train_batches]
else:
tqdm_args = [dataloader]
with tqdm(*tqdm_args) as pbar:
# ...
字典示例:
if flag:
tqdm_kwargs = {"iterable": dataloader, "total": args.num_train_batches}
else:
tqdm_kwargs = {"iterable": dataloader}
with tqdm(**tqdm_kwargs) as pbar:
# ...
很高兴为您提供帮助!
这不是特定于 tqdm 的,而是关于将参数传递给 Python 中的函数的一般问题。我想实现以下功能,而不必在 tqdm 下复制整个块。任何帮助将不胜感激。
if flag == True:
with tqdm(dataloader, total=args.num_train_batches) as pbar:
else:
with tqdm(dataloader) as pbar:
更具体地说,我可以这样传递参数吗?
if flag == True:
tqdm_args = dataloader, total=args.num_train_batches
else:
tqdm_args = dataloader
with tqdm(tqdm_args) as pbar:
其实做起来还挺简单的,看来他们在做Python的时候就想到了这一点。您可以使用 Python 的 ternary operator 来执行此操作,将上面的内容压缩到一行:
with tqdm(dataloader, total=args.num_train_batches if flag else None) as pbar:
# ...
编辑: 用您提到的首选方法回答,是的。这也是可能的。如果您将这些参数放入列表(或字典,如果您有关键字参数),然后在调用函数时在列表名称前面放置 *
(或 **
用于字典),它将列表解压缩为一组参数。
使用列表的示例:
if flag: # if flag is a boolean, putting "== True" does nothing
tqdm_args = [dataloader, None, args.num_train_batches]
else:
tqdm_args = [dataloader]
with tqdm(*tqdm_args) as pbar:
# ...
字典示例:
if flag:
tqdm_kwargs = {"iterable": dataloader, "total": args.num_train_batches}
else:
tqdm_kwargs = {"iterable": dataloader}
with tqdm(**tqdm_kwargs) as pbar:
# ...
很高兴为您提供帮助!