
本文介绍了如何在 Python 递归循环中持续输出状态信息到终端,避免信息被覆盖。通过 tqdm 库,可以方便地创建进度条,即使在复杂的二分搜索等场景下,也能有效地显示进度,提升用户体验。
在编写复杂的 Python 程序时,特别是涉及到耗时的递归循环,实时了解程序的运行状态至关重要。直接使用 print 语句可能会导致输出信息被覆盖,难以追踪进度。本文将介绍如何使用 tqdm 库在终端中创建动态更新的进度条,以便更好地监控程序的执行过程。
tqdm 是一个强大的 Python 库,用于在循环中创建进度条。它易于使用,并且可以与各种类型的循环集成,包括 for 循环和 while 循环。
首先,需要安装 tqdm 库。可以使用 pip 进行安装:
立即学习“Python免费学习笔记(深入)”;
pip install tqdm
tqdm 的基本用法非常简单。只需将需要监控的循环包装在 tqdm() 函数中即可。例如:
from tqdm import tqdm
import time
for i in tqdm(range(10)):
# 模拟耗时操作
time.sleep(0.5)这段代码会在终端中显示一个进度条,随着循环的进行而更新。
在递归循环中使用 tqdm 稍微复杂一些,因为需要确定循环的总迭代次数。如果无法事先确定迭代次数,则需要采取一些技巧来估计或计算。
考虑一个二分搜索的例子。假设要在区间 [low, high] 中搜索一个值,直到区间宽度小于某个阈值。在这种情况下,可以根据初始区间大小和精度阈值来估计迭代次数。
from tqdm import tqdm
from math import log2
def binary_search(low, high, tolerance, costly_subroutine):
"""
使用二分搜索查找满足条件的解。
Args:
low: 区间下界。
high: 区间上界。
tolerance: 精度阈值。
costly_subroutine: 一个耗时的子程序,用于判断当前值是否满足条件。
Returns:
满足条件的解。
"""
pbar_length = log2(high - low)
pbar = tqdm(total=int(pbar_length - log2(tolerance)), leave=False, desc="Binary Search")
while abs(high - low) > tolerance:
mid = (high + low) / 2
if costly_subroutine(mid):
high = mid
else:
low = mid
pbar.update(1)
pbar.close()
return (high + low) / 2
# 示例用法
def example_costly_subroutine(x):
# 模拟耗时操作
time.sleep(0.1)
return x > 0.5
low_theta = 0
high_theta = 1
tolerance = 1e-5
result = binary_search(low_theta, high_theta, tolerance, example_costly_subroutine)
print(f"Result: {result}")在这个例子中,binary_search 函数使用 tqdm 显示二分搜索的进度。pbar_length 根据初始区间大小和精度阈值计算得到,用于初始化进度条的总长度。leave=False 参数表示进度条在循环结束后自动消失。desc 参数用于设置进度条的描述信息。
tqdm 是一个非常实用的 Python 库,可以帮助开发者在终端中创建动态更新的进度条,从而更好地监控程序的运行状态。在递归循环中使用 tqdm 时,需要注意迭代次数的估计和进度条的层级关系。通过合理使用 tqdm,可以显著提升用户体验,使程序更易于调试和维护。
以上就是Python 中在递归循环中保存终端输出的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号