Python print()函数详讲

Python print() 函数详讲
(从入门到进阶、从常见误区到鲜为人知的细节,2025-2026 实用版)

print(*objects, sep=' ', end='\n', file=None, flush=False)

1. 五个参数各自的真正含义

参数默认值真正作用最常用场景
*objects要打印的内容,可以是 0 个、1 个或多个对象(自动调用 str())常规输出
sep‘ ‘ (空格)多个对象之间的分隔符print(a,b,c, sep=’,’) → 1,2,3
end‘\n’本次 print 结束后追加的字符串print(“Loading”, end=”) → 不换行
filesys.stdout输出目标对象(必须有 .write() 方法)写文件、写内存缓冲、写网络 socket 等
flushFalse是否立即刷新缓冲区(强制把内容写到 file)日志、进度条、实时输出

2. 常用写法速查表(建议收藏)

# 最基础
print("Hello")

# 多个值 + 自定义分隔符
print(1, 2, 3, 4)                  # 1 2 3 4
print(1, 2, 3, sep=',')           # 1,2,3
print(1, 2, 3, sep=' | ')         # 1 | 2 | 3

# 不换行(最常见进度条写法)
print("进度: 45%", end='\r')      # \r 回到行首
print("正在处理...", end='', flush=True)

# 同时输出到文件
with open("log.txt", "a", encoding="utf-8") as f:
    print("错误发生", file=f)

# 同时输出到屏幕和文件(最实用组合)
import sys
print("重要信息", file=sys.stdout)          # 默认就是 stdout
print("调试信息", file=sys.stderr)          # 错误通道(红色)

# 格式化(现代写法推荐)
name, age = "小明", 18
print(f"{name} 今年 {age} 岁")             # f-string(首选)
print("{} 今年 {} 岁".format(name, age))    # 仍然常用
print("%s 今年 %d 岁" % (name, age))        # 老风格(不推荐新代码用)

# 打印复杂对象(调试神器)
data = {"a":1, "b":[2,3], "c":(4,5)}
print(data)                                 # 直接打印
print(repr(data))                           # 更精确(带引号等)
from pprint import pprint
pprint(data, width=40, indent=2)            # 美化输出(推荐)

3. 真正高频但很多人不会用的技巧

3.1 进度条 / 实时刷新(最经典写法)

import time

for i in range(101):
    print(f"\r进度: {i}%", end="", flush=True)
    time.sleep(0.05)
print()  # 最后换行

3.2 同时写屏幕 + 文件(日志常用)

class Tee:
    def __init__(self, *files):
        self.files = files

    def write(self, text):
        for f in self.files:
            f.write(text)
            f.flush() if hasattr(f, 'flush') else None

    def flush(self):
        for f in self.files:
            if hasattr(f, 'flush'):
                f.flush()

import sys
log_file = open("run.log", "a", encoding="utf-8")
sys.stdout = Tee(sys.stdout, log_file)

print("这条同时出现在屏幕和文件里")

3.3 彩色输出(终端美化,面试/工具常用)

# 简单版(不依赖第三方库)
print("\033[31m红色警告\033[0m")     # 红色
print("\033[1;32m粗体绿色\033[0m")   # 粗体绿色
print("\033[93m黄色高亮\033[0m")     # 黄色

# 颜色对照(最常用几种)
# 31 红   32 绿   33 黄   34 蓝   35 紫   36 青   37 白
# 加 1 变粗体   加 4 下划线   加 9 删除线

3.4 打印到 stderr(区分正常输出与错误)

import sys

print("正常信息", file=sys.stdout)
print("警告/错误", file=sys.stderr)

4. 容易踩的坑(真实案例排序)

排名问题写法真实表现正确做法
1print(“a”,”b”,”c”,sep=””)abc(没有空格)sep=” 才是空字符串
2for i in range(10): print(i,end=”)0123456789(但缓冲严重,卡顿)加 flush=True
3print(“中文”, encoding=’utf-8′)TypeErrorencoding 是 open() 的参数,不是 print
4print(f”{x=}”)x=42(Python 3.8+ 支持)3.7 及以下不支持
5print(*lst, sep=’\n’)每个元素一行非常好用,但很多人忘记 * 解包

5. print() 在不同 Python 版本的细微变化(快速对照)

版本重要变化点
2.xprint 是语句,不是函数
3.0~3.7基本稳定
3.8支持 f”{var=}” 调试神器
3.9+无大变化,但性能持续微优化
3.12+更好的错误提示(比如 sep/end 类型错)

6. 总结:print() 现代推荐写法模板

# 日常调试
print(f"{variable=}")               # 3.8+
print(f"[{__name__}] {msg}")        # 带模块名

# 进度/日志
print(f"\r{msg}", end="", flush=True)

# 带颜色(终端)
print("\033[31m[ERROR]\033[0m", msg)

# 多值分隔
print(*values, sep=" | ", end="\n\n")

# 同时记录文件
print(msg, file=log_file, flush=True)

你现在最常遇到的 print 相关问题是哪一类?

  • 进度条/实时刷新卡顿?
  • 想做漂亮的表格输出?
  • 需要同时输出到多个目标?
  • 彩色 + emoji 美化终端?
  • 还是调试时打印嵌套结构很乱?

告诉我,我可以给你更针对性的进阶写法。

文章已创建 4323

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

相关文章

开始在上面输入您的搜索词,然后按回车进行搜索。按ESC取消。

返回顶部