首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >控制台输出也能玩这么花?!

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

作者头像
Crossin先生
发布2026-03-11 18:47:48
发布2026-03-11 18:47:48
230
举报

视频版:

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

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

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

代码语言:javascript
复制
from tqdm.rich import trange

X = 10000
for i in trange(X):
    for j in range(X):
        k = j * i
print('完成!')

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

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

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

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

代码语言:javascript
复制
pip install rich

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

代码语言:javascript
复制
from rich import print

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

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

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

代码语言:javascript
复制
from rich import inspect
inspect(list, methods=True)

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

代码语言:javascript
复制
from rich import inspect
import requests

r = requests.get('https://python666.cn')
inspect(r)

方便又清晰。

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

代码语言:javascript
复制
import logging
from rich.logging import RichHandler

# 配置日志级别和格式
logging.basicConfig(level='NOTSET', format='%(message)s', handlers=[RichHandler()])

# 输出不同级别的日志
logging.info("GET https://python666.cn/ 200")
logging.debug(logging)
try:
    1 / 0
except Exception as e:
    logging.exception(e)
logging.warning('你的鸡脚要漏出来了')
logging.critical('你干嘛~~~~~~~~哎哟!')

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

代码语言:javascript
复制
from rich import traceback
traceback.install(show_locals=True)
1 / 0

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

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

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

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

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

代码语言:javascript
复制
from rich import print
from rich.table import Column, Table

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 还支持类似于:

给输出添加边框:

代码语言:javascript
复制
from rich import print
from rich.panel import Panel
print(Panel.fit("毛衣\n背带裤", title="中分灰发", subtitle="鸡脚"))

多列输出:

代码语言:javascript
复制
import os
from rich import print
from rich.columns import Columns

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

树形结构输出:

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

代码语言:javascript
复制
from rich import print
from rich.syntax import Syntax
code = 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 格式输出:

代码语言:javascript
复制
python -m rich.markdown README.md

等等等等……

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

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

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

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

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

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

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

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

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

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

感谢转发点赞的各位~

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-10-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Crossin的编程教室 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档