分享

控制台输出也能玩这么花?!

 编程教室 2025-10-20 发布于江苏

视频版:

之前我们介绍过几种显示进度条的方法:

一个进度条还能玩这么花?

其中在tqdm模块时提到,用tqdm.rich可以得到彩色的进度条:

from tqdm.rich import trange
X = 10000for i in trange(X):    for j in range(X):        k = j * iprint('完成!')

这个.rich,其实是用到了另一个更加奇葩的模块。今天我就来盘一盘这个rich模块。

Rich 模块的文档里是这么写的:

它可以为您在终端中提供富文本和精美格式。

老规矩,先用pip命令安装一下:

pip install rich

最简单的用法,就是导入 rich 中的 print 覆盖原函数,这就能让你的控制台输出更加的优雅。而且,你还可以通过标签来手动指定输出字符的颜色和样式:

from rich import print
print(locals())print('[red]Crossin[/red]的[u]编程教室[/u]')

当然 rich 的功能不止如此。比如:

可以用 rich.inspect 查看模块、类型或函数的文档说明:

from rich import inspectinspect(list, methods=True)

还能用来查看运行中实例的各项属性值:

from rich import inspectimport requests
r = requests.get('https://')inspect(r)

方便又清晰。

rich.logging 可以优化日志的输出,只需要多加一个handler参数,不同级别的日志一目了然:

import loggingfrom rich.logging import RichHandler
# 配置日志级别和格式logging.basicConfig(level='NOTSET', format='%(message)s', handlers=[RichHandler()])
# 输出不同级别的日志logging.info("GET https:/// 200")logging.debug(logging)try:    1 / 0except Exception as e:    logging.exception(e)logging.warning('你的鸡脚要漏出来了')logging.critical('你干嘛~~~~~~~~哎哟!')

rich.traceback 则可以让你的程序报错信息更容易阅读。你要做的也仅仅是多加一行代码而已:

from rich import tracebacktraceback.install(show_locals=True)1 / 0

自从用了rich库,小白再也不担心女朋友说他整天对着一块黑白屏幕了。(因为他本来就没有女朋友)

除了对控制台的输出文字进行美化之外。rich 还提供了一些特殊格式的显示支持。比如之前视频讲过的进度条。

对于不方便计算具体进度的情况,也可以用 rich.spinner 来添加一个加载动画,让你的程序告别枯燥的等待。

相比于默认的逐行输出,rich 的一大特性是可以在固定位置上更新显示。这就可以让输出呈现出更加动态的效果,比如实现这样一个系统资源的监控程序。

如果你想在控制台中输出表格类的二维数据,那你一定会喜欢上 rich.table。对比用print手动排版输出,这真是的降维打击了:

from rich import printfrom rich.table import ColumnTable
table = Table(show_header=True, header_style="bold magenta")table.add_column("爱好")table.add_column("练习时长", style="bold blue")table.add_row("唱", "0.5")table.add_row("跳", "1")table.add_row("rap", "0.5")table.add_row("篮球", "1")table.add_row("总计", "2.5")print(table)

试想一下,如果程序设计相关的课程作业,你交上一份这样的输出,助教还不得给你多加10分。

此外,rich 还支持类似于:

给输出添加边框:

from rich import printfrom rich.panel import Panelprint(Panel.fit("毛衣\n背带裤", title="中分灰发", subtitle="鸡脚"))

多列输出:

import osfrom rich import printfrom rich.columns import Columns
directory = os.listdir('homework')columns = Columns(directory, equal=True, expand=True, width=25)print(columns)

树形结构输出:

对代码进行语法高亮输出:

from rich import printfrom rich.syntax import Syntaxcode = r'''def quick_sort(arr):    if len(arr) <= 1:        return arr    pivot = arr[len(arr) // 2]    left = [x for x in arr if x < pivot]    middle = [x for x in arr if x == pivot]    right = [x for x in arr if x > pivot]    return quick_sort(left) + middle + quick_sort(right)
print(quick_sort([3,6,8,10,1,2,1]))'''syntax = Syntax(code, "python", theme="monokai", line_numbers=True)print(syntax)

markdown 格式输出:

python -m rich.markdown README.md

等等等等……

这里我就不再一一演示,rich的文档中提供了详细的说明和具体的演示示例,大部分效果都只需要简单几行代码就能搞定。

rich 的跨平台支持也做得很好。写一份代码,就可以分别在windows控制台、mac终端,以及jupyter网页上正常运行。

不过在pycharm里运行时,需要在设置里勾选上“在输出控制台中模拟终端”,否则无法正常起作用。

有人可能要说了:控制台不就是输出一些调试信息,给开发人员自己看的嘛,还这么折腾干嘛?

控制台输出好不好看的确不影响程序的功能。但借用乔布斯说过的一句话:“优秀的木匠不会用劣质木板去做柜子的背板,即使没人会看到。”这句话放在编程上也是一样。你可以选择只实现功能需求,也可以选择让程序更具有可读性、可维护性、可扩展性,占用资源更少,执行效率更高。

很多优秀产品的背后,都离不开这种吹毛求疵的折腾。

这大概就是“码农”和“程序设计师”的区别吧。

随着AI的发展,码农的工作逐渐会被替代,而程序设计师仍会在很长时间内不可或缺。

看到这里还没有离开的小伙伴,想必也是具备如此精益求精的自我修养吧?

如果本文对你有帮助,欢迎点赞、评论、转发。你们的支持是我更新的动力~

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多