使用tqdm将功能的内部逻辑与显示用户信息分开

问题描述 投票:0回答:1

我想知道是否可以将功能逻辑与

tqdm
显示的用户信息分开?目前,我的函数接受
verbose
参数并包含 if-else 语句,以便根据用户的输入显示或不显示用户信息。但我认为,如果函数本身与用户信息没有任何关系,并且可以在其范围之外定义详细程度(这将允许我摆脱 if-else 语句和详细参数),那么它会更清晰)。目前我正在做这样的事情:

from tqdm import trange
from time import sleep

# user defined
verbose = True

def my_function(verbose):
    
    if verbose == True:
        for i in trange(100):
            sleep(0.01)
            
    elif verbose == False:
        for i in range(100):
            sleep(0.01)
            
            
my_function(verbose)

相反,可以做这样的事情吗?

verbose = True

if verbose == True:
    with tqdm():
        my_function()
elif verbose == False:
    my_function()

python progress-bar tqdm
1个回答
0
投票

一种可能的解决方案是使用自定义上下文管理器,当

trange()
:
 时,将 
range()
 覆盖为正常 
verbose == False

from contextlib import contextmanager
from time import sleep

from tqdm import trange


@contextmanager
def verbose_range(verbose):
    global trange
    try:
        __trange = trange
        if not verbose:
            trange = range
        yield
    finally:
        trange = __trange


def my_function():
    for i in trange(100):
        sleep(0.01)


with verbose_range(True):
    my_function()

打印:

100%|█████████████████████████████████████████████████| 100/100 [00:01<00:00, 99.30it/s]
© www.soinside.com 2019 - 2024. All rights reserved.