
视频版:
之前我们介绍过几种显示进度条的方法:
其中在tqdm模块时提到,用tqdm.rich可以得到彩色的进度条:
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命令安装一下:
pip install rich最简单的用法,就是导入 rich 中的 print 覆盖原函数,这就能让你的控制台输出更加的优雅。而且,你还可以通过标签来手动指定输出字符的颜色和样式:
from rich import print
print(locals())
print('[red]Crossin[/red]的[u]编程教室[/u]')
当然 rich 的功能不止如此。比如:
可以用 rich.inspect 查看模块、类型或函数的文档说明:
from rich import inspect
inspect(list, methods=True)
还能用来查看运行中实例的各项属性值:
from rich import inspect
import requests
r = requests.get('https://python666.cn')
inspect(r)
方便又清晰。
rich.logging 可以优化日志的输出,只需要多加一个handler参数,不同级别的日志一目了然:
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 则可以让你的程序报错信息更容易阅读。你要做的也仅仅是多加一行代码而已:
from rich import traceback
traceback.install(show_locals=True)
1 / 0
自从用了rich库,小白再也不担心女朋友说他整天对着一块黑白屏幕了。(因为他本来就没有女朋友)
除了对控制台的输出文字进行美化之外。rich 还提供了一些特殊格式的显示支持。比如之前视频讲过的进度条。

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

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

如果你想在控制台中输出表格类的二维数据,那你一定会喜欢上 rich.table。对比用print手动排版输出,这真是的降维打击了:
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 还支持类似于:
给输出添加边框:
from rich import print
from rich.panel import Panel
print(Panel.fit("毛衣\n背带裤", title="中分灰发", subtitle="鸡脚"))
多列输出:
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)
树形结构输出:

对代码进行语法高亮输出:
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 格式输出:
python -m rich.markdown README.md
等等等等……
这里我就不再一一演示,rich的文档中提供了详细的说明和具体的演示示例,大部分效果都只需要简单几行代码就能搞定。

rich 的跨平台支持也做得很好。写一份代码,就可以分别在windows控制台、mac终端,以及jupyter网页上正常运行。
不过在pycharm里运行时,需要在设置里勾选上“在输出控制台中模拟终端”,否则无法正常起作用。

有人可能要说了:控制台不就是输出一些调试信息,给开发人员自己看的嘛,还这么折腾干嘛?
控制台输出好不好看的确不影响程序的功能。但借用乔布斯说过的一句话:“优秀的木匠不会用劣质木板去做柜子的背板,即使没人会看到。”这句话放在编程上也是一样。你可以选择只实现功能需求,也可以选择让程序更具有可读性、可维护性、可扩展性,占用资源更少,执行效率更高。
很多优秀产品的背后,都离不开这种吹毛求疵的折腾。
这大概就是“码农”和“程序设计师”的区别吧。
随着AI的发展,码农的工作逐渐会被替代,而程序设计师仍会在很长时间内不可或缺。
看到这里还没有离开的小伙伴,想必也是具备如此精益求精的自我修养吧?
如果本文对你有帮助,欢迎点赞、评论、转发。你们的支持是我更新的动力~
感谢转发和点赞的各位~
本文分享自 Crossin的编程教室 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体同步曝光计划 ,欢迎热爱写作的你一起参与!