
本文介绍了如何在 Python 递归循环中持续输出状态信息到终端,避免信息被覆盖。通过 tqdm 库,可以方便地创建进度条,即使在复杂的二分搜索等场景下,也能有效地显示进度,提升用户体验。
在编写复杂的 Python 程序时,特别是涉及到耗时的递归循环,实时了解程序的运行状态至关重要。直接使用 print 语句可能会导致输出信息被覆盖,难以追踪进度。本文将介绍如何使用 tqdm 库在终端中创建动态更新的进度条,以便更好地监控程序的执行过程。
使用 tqdm 显示进度
tqdm 是一个强大的 Python 库,用于在循环中创建进度条。它易于使用,并且可以与各种类型的循环集成,包括 for 循环和 while 循环。
安装 tqdm
首先,需要安装 tqdm 库。可以使用 pip 进行安装:
立即学习“Python免费学习笔记(深入)”;
pip install tqdm
基本用法
tqdm 的基本用法非常简单。只需将需要监控的循环包装在 tqdm() 函数中即可。例如:
from tqdm import tqdmimport timefor i in tqdm(range(10)): # 模拟耗时操作 time.sleep(0.5)
这段代码会在终端中显示一个进度条,随着循环的进行而更新。
在递归循环中使用 tqdm
在递归循环中使用 tqdm 稍微复杂一些,因为需要确定循环的总迭代次数。如果无法事先确定迭代次数,则需要采取一些技巧来估计或计算。
示例:二分搜索
考虑一个二分搜索的例子。假设要在区间 [low, high] 中搜索一个值,直到区间宽度小于某个阈值。在这种情况下,可以根据初始区间大小和精度阈值来估计迭代次数。
from tqdm import tqdmfrom math import log2def 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.5low_theta = 0high_theta = 1tolerance = 1e-5result = binary_search(low_theta, high_theta, tolerance, example_costly_subroutine)print(f"Result: {result}")
在这个例子中,binary_search 函数使用 tqdm 显示二分搜索的进度。pbar_length 根据初始区间大小和精度阈值计算得到,用于初始化进度条的总长度。leave=False 参数表示进度条在循环结束后自动消失。desc 参数用于设置进度条的描述信息。
注意事项
准确估计迭代次数: tqdm 的效果很大程度上取决于迭代次数的准确性。如果迭代次数估计不准确,进度条的显示可能会误导用户。耗时操作: tqdm 本身也会带来一定的性能开销。对于非常短的循环,使用 tqdm 可能会降低程序的运行速度。嵌套循环: 在嵌套循环中使用 tqdm 时,需要注意进度条的层级关系。可以使用 leave=False 参数来控制子循环的进度条是否在循环结束后消失,以避免混乱。
总结
tqdm 是一个非常实用的 Python 库,可以帮助开发者在终端中创建动态更新的进度条,从而更好地监控程序的运行状态。在递归循环中使用 tqdm 时,需要注意迭代次数的估计和进度条的层级关系。通过合理使用 tqdm,可以显著提升用户体验,使程序更易于调试和维护。
以上就是Python 中在递归循环中保存终端输出的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1377141.html
微信扫一扫
支付宝扫一扫