神奇的 \033 ,让打印出彩



Python 好色


  1. \033 打印控制符解析
  2. \033源码控制打印
  3. 调用 color() 控制打印
  4. 在命令行模式下查看 color() 帮助文档
  5. color() 完整源码
  6. \033 VS color()

在这里插入图片描述




Python 有色打印指令用法示例:

  \033[(打印效果);(前景色);(背景色)m…\033[0m ,“打印效果”“前景色””背景色”三个参数,可以任意缺省,缺省的就用默认值。

Python 打印控制设置可以拆分成三部分理解:

   \033[   打印控制符(不可或缺和写错)
  小写 m   打印设置结束符(同样不可或缺)
   \033[0m   设置打印为默认

在这里插入图片描述


    “\033[m…\033[0m”

  这个 Python 彩色打印的代码难记且难用,一不注意就是语法错误。还要记住前景色、背景色和效果代码数字,实在不好操作。

回首页

  我在探究之后,码了个函数模块 python_color ,只要在 Python 彩色打印字符串生成函数 color() 参数中除要彩色打印的字符串外,依次以英文单词字符输入“前景色”“背景色”和“效果”即可(除要彩色打印的字符串外,都可以缺省,使用默认值)。真好方便,不用管我的模块函数怎么操作。

我的 color() 在命令行下的调用:

在这里插入图片描述


*.py 文件调用 color()

下面上一段调用代码,试试 color() 的用法:
#!/usr/bin/nve python # Linux 脚本解释器路径指定注释。
# coding: utf-8 #本脚本编码说明。
import python_color as pcolor
'''加载“ Python 好色”模块。
该模块就俩函数:color() ,colors_table()
color() ,生成 python 能有“色”打印的字符串。
colors_table() 调用函数 color() 
打印 python \033[m...\033[0m 
彩色打印代码表。'''

print(f'\n\n示例打印:\n\n{pcolor.color(" Python 好色", "red"):^60}\n')
#示例居中打印“ Python 好色”

print(f'\n{pcolor.color("Hello world!", "yellow", "red"):^64}\n')
#示例前景色黄色背景色红色居中打印“ Hello world!”

print(f'\n{pcolor.color("梦幻精灵_cq是重庆崽儿。", "green", "gray", "light"):^54}\n')
#示例前景色绿色背景色灰色高亮居中打印“梦幻精灵_cq是重庆崽儿。”

print(pcolor.color('直接使用默认值打印').center(55))
代码运行效果

在这里插入图片描述


回首页

调用代码
pcolor.colors_table() #调用函数打印“ Python 好色”效果图。

在这里插入图片描述


回首页

上面这张图打印代码
(如果从语句注释不能清楚作用,请评论区留言指教和探讨。🤝)

def colors_table():
    '''调用 color() 打印效果图'''
    color_s = color(' Python 好色效果图', 'red', 'green', 'light')
    s_033 = "\\033编码"
    print(f'\n\n\n{color_s:_^57}\n\n\n\
{color("色显效果(前景色以红色为例)"	, "yellow", "black", "light"):^52}\n\
\n{color(" Cut-off rule ", "black", "blue", "lobright"):.^64}\
\n\n{color(s_033, "green")	:>22}{"":>5}{color("显示效果", "green")}{"":>6}{color(" color() 单词", "green")}\n\
\n{"0"	:>8}{"":>4}{color("终端默认设置", "red", "black", "default")}{"":>4}{color("default(默认)", "green")}\n\
{"1"	:>8}{"":>4}{color("高亮显示", "red", "black", "light")}{"":>8}{color("light(高亮)", "green")}\n\
{"2"	:>8}{"":>4}{color("低亮显示", "red", "black", "lobright")}{"":>8}{color("lobright(低亮)", "green")}\n\
{"4"	:>8}{"":>4}{color("使用下划线", "red", "black", "unline")}{"":>6}{color("unline(下划线)", "green")}\n\
{"5"	:>8}{"":>4}{color("闪烁", "red", "black", "flicker")}{"":>12}{color("flicker(闪烁)", "green")}\n\
{"7"	:>8}{"":>4}{color("反白显示", "red", "black", "inverse")}{"":>8}{color("inverse(反白)", "green")}\n\
{"8"	:>8}{"":>4}{color("消隐", "red", "black", "blanking")}{"":>12}{color("blanking(消隐)", "green")}\n\
\n{color(" Cut-off rule ", "black", "blue", "lobright"):.^64}\n\
\
\n\n{color("前景色(背景色以黑色为例)"	, "yellow", "black", "light"):^52}\n\
\n{color(" Cut-off rule ", "black", "blue", "lobright"):.^64}\
\n\n{color(s_033, "green")	:>26}{"":>4}{color("颜色", "green")}{"":>6}{color(" color() 单词", "green")}\n\
\n{"30"	:>12}{"":>6}{color("黑色", "black", "blue", "default")}{"":>6}{color("black(黑色)", "green")}\n\
{"31"	:>12}{"":>6}{color("红色", "red", "black", "default")}{"":>6}{color("red(红色)", "green")}\n\
{"32"	:>12}{"":>6}{color("绿色", "green", "black", "default")}{"":>6}{color("green(绿色)", "green")}\n\
{"33"	:>12}{"":>6}{color("黄色", "yellow", "black", "default")}{"":>6}{color("yellow(黄色)", "green")}\n\
{"34"	:>12}{"":>6}{color("蓝色", "blue", "black", "default")}{"":>6}{color("blue(蓝色)", "green")}\n\
{"35"	:>12}{"":>6}{color("紫色", "purple", "black", "default")}{"":>6}{color("purple(紫色)", "green")}\n\
{"36"	:>12}{"":>6}{color("青色", "cyan", "black", "default")}{"":>6}{color("cyan(青色)", "green")}\n\
{"37"	:>12}{"":>6}{color("灰色", "gray", "black", "default")}{"":>6}{color("gary(灰色)", "green")}\n\
{"37"	:>12}{"":>6}{color("白色", "white", "black", "default")}{"":>6}{color("white(白色)", "green")}\n\
\n{color(" Cut-off rule ", "black", "blue", "lobright"):.^64}\n\
\
\n\n{color("背景色(前景色以黑色为例)"	, "yellow", "black", "light"):^52}\n\
\n{color(" Cut-off rule ", "black", "blue", "lobright"):.^64}\
\n\n{color(s_033, "green")	:>26}{"":>4}{color("颜色", "green")}{"":>6}{color(" color() 单词", "green")}\n\
\n{"40"	:>12}{"":>6}{color("黑色", "blue", "black", "default")}{"":>6}{color("black(黑色)", "green")}\n\
{"41"	:>12}{"":>6}{color("红色", "black", "red", "default")}{"":>6}{color("red(红色)", "green")}\n\
{"42"	:>12}{"":>6}{color("绿色", "black", "green", "default")}{"":>6}{color("green(绿色)", "green")}\n\
{"43"	:>12}{"":>6}{color("黄色", "black", "yellow", "default")}{"":>6}{color("yellow(黄色)", "green")}\n\
{"44"	:>12}{"":>6}{color("蓝色", "black", "blue", "default")}{"":>6}{color("blue(蓝色)", "green")}\n\
{"45"	:>12}{"":>6}{color("紫色", "black", "purple", "default")}{"":>6}{color("purple(紫色)", "green")}\n\
{"46"	:>12}{"":>6}{color("青色", "black", "cyan", "default")}{"":>6}{color("cyan(青色)", "green")}\n\
{"47"	:>12}{"":>6}{color("灰色", "black", "gray", "default")}{"":>6}{color("gary(灰色)", "green")}\n\
{"47"	:>12}{"":>6}{color("白色", "black", "white", "default")}{"":>6}{color("white(白色)", "green")}\n\
\n{color(" Cut-off rule ", "black", "blue", "lobright"):.^64}\
\
\n\n\n{color(" The end ", "black", "blue", "lobright"):_^64}\n')
  上面的代码,就是对 color() 用法的最好示例。

注意:
  如上面的代码,对 Python 彩色打印的字符串进行对齐操作,控制彩色显示的代码占据了14个半角位置计算,但却没有真正显示。要记得作相应的处理,才可对打印出齐整的彩色输出。

回首页


在这里插入图片描述

  加载 color() ,用 help(color) 查看帮助文档。下图是“帮助文档”内容。

在这里插入图片描述

作者注:
   前面对“消隐”效果的理解有误。特此更正:“消隐”,只作用于前景色。(前面的试炼,用了黑色关背景色,导致我的的认知偏差。“效果图打印”源码已作更正。)
2022-02-17 07:30

回首页

color() 源码
#!/usr/bin/nve python # Linux 脚本解释器路径指定注释。
# coding: utf-8 #本脚本编码说明。


'''

作者:梦幻精灵_cq
QQ:479469838(八爪章鱼)

2022-2-16

'''


def color(s = '要彩色显示的字符串', fg_color = 'gray', bg_color = 'black', effect = 'default'):
    '''
|
|        本函数生成“\\033[效果;前景色;背景色m
|    要彩色显的字符串\\033[0m”字符串,中间不
|    可以有空格,分号是半角分号且“必不可少”。
|    实现 python 代码彩色打印字符串。
|
|     fg_color    前景色
|     bg_color    背景色
|     effect    显示效果
|
|
|    颜色(前/背景色)包括:
|
|    本函数颜色    颜色    \\033代码
|    black    黑色    0
|    red    红色    1
|    green    绿色    2
|    yellow    黄色    3
|    blue    蓝色    4
|    purple    紫色    5
|    cyan    青色    6
|    gray(white) 灰色(白色)    7
|
|
|    效果包括:
|
|    本函数效果    效果    \\033代码
|    	default    默认    0
|    	light    高亮(增加显示亮度)    1
|    	lobright    低亮(降低显示亮度)    2
|    	unline    下划线    4
|    	flicker    闪烁    5
|    	inverse    反白    7
|    	blanking    消隐(大多不用,都不显,
|                还搞什么搞😜)    8
|
|
|    可缺省参数优先级:
|
|    fg_color > bg_color > effect
|
|        就是说,如果缺省一个参数,只能是效果
|    (effect);缺省两个参数,一定是效果(eff-
|    ect)和背景色(bg_color);三个都缺省,就
|    是本函数默认值。默认值是前景色灰色(gray/
|    white)、背景色(black)、效果(default),
|    和没使用本函数一样,虽然字符串中有
|    彩色打印代码。虽然可以缺省三个参数,但
|    至少要用一个,那就是前景色,才可以彩色
|    打印。
|        要色显的字符串 s ,不可以缺省,一定
|    要有这个参数。不然会报缺少参数的错。
|
|
    '''
    
    
    colors = {
    	'black': 0, 
    	'red': 1, 
    	'green': 2, 
    	'yellow': 3, 
    	'blue': 4, 
    	'purple': 5, 
    	'cyan':6, 
    	'gray': 7,
    	'white': 7,
    	'default': 0, 
    	'light': 1, 
    	'lobright': 2,
    	'unline': 4, 
    	'flicker': 5, 
    	'inverse': 7, 
    	'blanking': 8
    	} #颜色和效果字典
    fg_color = colors.get(fg_color)
    bg_color = colors.get(bg_color)
    effect = colors.get(effect)
    return f'\033[{effect};3{fg_color};4{bg_color}m{s}\033[0m'

回首页

\033 打印控制符和 color() 优劣对比

  • 优点:前者“打印效果”“前景色”“背景色”三个参数可以任意缺省;后者只能“打印效果” > “背景色” > “前景色”优先级缺省。
  • 缺点:前者色彩和效果代码不易识记且易混淆;后者用英文单词(或约定写法)为函数参数,对打印进行控制,方便高效,几乎不用识记。可以无视函数内部 \033 打印控制语法,能“熟练”调用函数就可以“得心应手”控制打印。


回首页

我的HOT博:

    • 3
      点赞
    • 13
      收藏
      觉得还不错? 一键收藏
    • 打赏
      打赏
    • 0
      评论
    评论
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

    当前余额3.43前往充值 >
    需支付:10.00
    成就一亿技术人!
    领取后你会自动成为博主和红包主的粉丝 规则
    hope_wisdom
    发出的红包

    打赏作者

    梦幻精灵_cq

    你的鼓励将是我创作的最大动力

    ¥1 ¥2 ¥4 ¥6 ¥10 ¥20
    扫码支付:¥1
    获取中
    扫码支付

    您的余额不足,请更换扫码支付或充值

    打赏作者

    实付
    使用余额支付
    点击重新获取
    扫码支付
    钱包余额 0

    抵扣说明:

    1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
    2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

    余额充值