彩色文本,Python print() 居然还能这样玩?

大家好,在学习Python编程的过程中,我们习惯于使用 print() 函数来输出文本。然而,许多人不知道的是,print() 函数不仅能输出普通的黑白文本,还能输出彩色文本。

image-20240605162416364

原理

终端与ANSI转义序列

在深入代码之前,我们需要了解一些基础知识。终端(Terminal)是我们与操作系统交互的重要工具,而ANSI转义序列(ANSI escape sequences)则是控制终端行为的指令集合。通过这些转义序列,我们可以改变文本颜色、背景色等。

什么是ANSI转义序列?

ANSI转义序列是一串以 \033[ 开头的字符,用于控制终端的显示属性。常见的颜色码如下:

  • 字体颜色(Foreground color)
    • 黑色: 30
    • 红色: 31
    • 绿色: 32
    • 黄色: 33
    • 蓝色: 34
    • 洋红: 35
    • 青色: 36
    • 白色: 37
  • 背景颜色(Background color)
    • 黑色: 40
    • 红色: 41
    • 绿色: 42
    • 黄色: 43
    • 蓝色: 44
    • 洋红: 45
    • 青色: 46
    • 白色: 47

案例代码

基本用法

下面是一个简单的示例,展示如何使用ANSI转义序列打印彩色文本:

# 打印红色文本
print("\033[31m这是红色文本\033[0m")

# 打印绿色文本
print("\033[32m这是绿色文本\033[0m")

image-20240605161801134

在上述代码中,\033[31m 设置文本颜色为红色,\033[32m 设置文本颜色为绿色,\033[0m 则用于重置所有属性,以确保后续文本不受影响。

彩色文本函数

为了便于使用,我们可以封装一个函数,来简化彩色文本的打印:

def print_color(text, color):
    color_codes = {
        "black": "30",
        "red": "31",
        "green": "32",
        "yellow": "33",
        "blue": "34",
        "magenta": "35",
        "cyan": "36",
        "white": "37"
    }
    color_code = color_codes.get(color.lower(), "37")
    print(f"\033[{color_code}m{text}\033[0m")

# 使用封装的函数打印彩色文本
print_color("这是红色文本", "red")
print_color("这是绿色文本", "green")
print_color("这是蓝色文本", "blue")

image-20240605161829774

高级用法

我们还可以通过组合多种属性来实现更复杂的效果。例如,打印带有不同背景色的文本:

def print_color_bg(text, fg_color, bg_color):
    fg_color_codes = {
        "black": "30",
        "red": "31",
        "green": "32",
        "yellow": "33",
        "blue": "34",
        "magenta": "35",
        "cyan": "36",
        "white": "37"
    }
    bg_color_codes = {
        "black": "40",
        "red": "41",
        "green": "42",
        "yellow": "43",
        "blue": "44",
        "magenta": "45",
        "cyan": "46",
        "white": "47"
    }
    fg_code = fg_color_codes.get(fg_color.lower(), "37")
    bg_code = bg_color_codes.get(bg_color.lower(), "40")
    print(f"\033[{fg_code};{bg_code}m{text}\033[0m")

# 使用封装的函数打印带背景色的彩色文本
print_color_bg("红色文字,黄色背景", "red", "yellow")
print_color_bg("绿色文字,蓝色背景", "green", "blue")

image-20240605161922613

完整案例:彩色日志系统

我们可以利用上述知识,创建一个简单的彩色日志系统,用不同的颜色表示不同级别的日志信息:

class ColorLogger:
    def __init__(self):
        self.level_colors = {
            "info": "32",    # 绿色
            "warning": "33", # 黄色
            "error": "31"    # 红色
        }
    
    def log(self, message, level="info"):
        color_code = self.level_colors.get(level.lower(), "37")
        print(f"\033[{color_code}m[{level.upper()}] {message}\033[0m")

# 使用彩色日志系统
logger = ColorLogger()
logger.log("这是信息日志", "info")
logger.log("这是警告日志", "warning")
logger.log("这是错误日志", "error")

image-20240605161947596

彩色文本的输出不仅让代码更加生动,还能在实际开发中,如日志系统等,发挥重要作用。

相关推荐

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-18 10:20:02       66 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-18 10:20:02       70 阅读
  3. 在Django里面运行非项目文件

    2024-07-18 10:20:02       57 阅读
  4. Python语言-面向对象

    2024-07-18 10:20:02       68 阅读

热门阅读

  1. Django 中设置联合约束和联合索引

    2024-07-18 10:20:02       19 阅读
  2. VUE3监听Pinia.store中的数据

    2024-07-18 10:20:02       22 阅读
  3. MySQL源码安装

    2024-07-18 10:20:02       24 阅读
  4. 代码随想录学习 54day 图论 from代码随想录

    2024-07-18 10:20:02       21 阅读
  5. 前端js实现把网页导出为pdf

    2024-07-18 10:20:02       25 阅读
  6. 总部下达任务时,如何保证员工的执行力?

    2024-07-18 10:20:02       19 阅读
  7. 进行版本控制如何创建和合并分支

    2024-07-18 10:20:02       24 阅读
  8. mybatis使用oracle进行添加数据的心得

    2024-07-18 10:20:02       21 阅读
  9. js获取和设置url参数

    2024-07-18 10:20:02       20 阅读
  10. ISO 26262在汽车软件开发中的作用

    2024-07-18 10:20:02       21 阅读
  11. 用selenium爬取动态网页

    2024-07-18 10:20:02       22 阅读
  12. ubuntu如何彻底卸载android studio?

    2024-07-18 10:20:02       22 阅读