在递归循环期间保存Python中的终端输出

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

我有一个Python脚本,如下所示:

def function2(x):
     for j in range(100):
          # long-running computation on x and j

def function1():
     for i in range(100):
         function2(i)

我希望将持续状态打印到终端,如下所示:

Current i: 10
Current j: 31

它会随着 i 和 j 的变化而不断更新。我尝试使用回车符进行打印,但是一旦第二个函数开始打印,它就会删除第一个函数的输出。

一种解决方案是将

i
传递给第二个函数。这可行,但实际函数很复杂,并且已经接受了 11 个不同的输入,因此为了可读性,我不想再添加一个。我希望有一个内置方法可以做到这一点。

实际情况有点复杂,因为循环不仅仅是在某个范围内循环,而是二分搜索。因此,仅从局部变量(例如,

x
)无法判断二分搜索的进度。这也使得现有的进度条包更具挑战性。

python output
1个回答
0
投票

tqdm
成功了。

在我的特定情况下,我正在进行二分搜索。因此,我可以采用初始间隔的大小、搜索退出时的精度截止以及它们以 2 为底的对数的差值来获取迭代次数。这使得 tqdm 相当简单:

from tqdm import tqdm
low_theta = mp.pi / 6
high_theta = mp.pi / 2
theta=low_theta


pbar_length = log2(high_theta - low_theta)
pbar = tqdm(total=int(pbar_length - log2(1e-5)), leave=False, desc = str("Theta ")+str(recursion_depth) + str(" 1st loop"))
while abs(high_theta - low_theta) > 1e-5:
    theta = (high_theta + low_theta)/2
    if costly_subroutine(theta):
        high_theta = theta
    else:
        low_theta = theta
    pbar.update(1)
pbar.close()

这会在顶部显示一个非常缓慢移动的进度条,下面显示第二个进度条。每次第二个进度条结束时,最上面的进度条就会向前跳。

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.