我想知道是否可以将功能逻辑与
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()
一种可能的解决方案是使用自定义上下文管理器,当
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]