Python print()函数详讲

Python print() 函数详讲(2025-2026 视角)

print() 是 Python 中最常用的输出函数,看似简单,但实际上参数组合非常灵活,掌握它的各种用法能显著提升代码的可读性、调试效率和输出美观度。

1. print() 的基本签名(Python 3.x)

print(
    *objects,             # 要打印的对象(可多个,用逗号分隔)
    sep=' ',              # 对象之间的分隔符,默认空格
    end='\n',             # 结尾字符,默认换行
    file=None,            # 输出到哪里,默认 sys.stdout
    flush=False           # 是否立即刷新缓冲区
)

2. 常用参数详解 + 真实场景

参数默认值作用高频实用场景示例
*objects要打印的内容(可以是任意多个对象,会自动调用 str())print(a, b, c)
sep' '多个对象之间的分隔符print(“姓名”, “年龄”, “城市”, sep=”
end'\n'本次 print 结束后追加的字符串(不换行最常用)print(“.”, end=”) → 打印进度点不换行
fileNone输出目标(可以是文件对象、StringIO、sys.stderr 等)print(…, file=sys.stderr) → 错误日志
flushFalse是否强制立即刷新缓冲区(True 时不等缓冲区满就输出)长任务实时进度条、日志必须立即看到

3. 经典用法合集(从入门到进阶)

3.1 最基础用法

print("Hello", "World")           # Hello World
print(1, 2, 3, 4)                 # 1 2 3 4

3.2 控制分隔符(sep)

print("192", "168", "1", "100", sep=".")          # 192.168.1.100
print("item1", "item2", "item3", sep=" → ")       # item1 → item2 → item3
print(*range(1,6), sep=", ")                      # 1, 2, 3, 4, 5

3.3 不换行输出(end)

# 进度条风格
for i in range(10):
    print(".", end="", flush=True)   # 实时看到点一个一个出现
    time.sleep(0.3)
print()   # 最后补个换行

3.4 同时控制 sep 和 end

print("下载中", end=" ")
for _ in range(5):
    print("[■]", end="", sep="")
print(" 完成!")

3.5 输出到文件 / 错误流

import sys

# 普通输出到文件
with open("log.txt", "a", encoding="utf-8") as f:
    print("警告:温度过高", file=f)

# 输出到 stderr(红色高亮,在终端更醒目)
print("错误:文件不存在", file=sys.stderr)

3.6 flush 的真实价值(长任务)

# 没有 flush → 可能要等一堆任务结束才一次性看到输出
for i in range(100):
    print(f"处理 {i+1}/100", end="\r", flush=True)
    time.sleep(0.05)
print("\n完成!")

\r + flush=True 是最经典的单行覆盖式进度条写法。

4. 格式化输出的几种现代写法对比(print 内部配合)

写法示例代码可读性灵活性推荐场景
老式 %print(“姓名: %s, 年龄: %d” % (name, age))★★☆☆☆★★☆☆☆极老项目
str.format()print(“姓名: {}, 年龄: {:3d}”.format(name, age))★★★☆☆★★★★☆Python 3.0–3.5 时代主流
f-string(首选)print(f”姓名: {name}, 年龄: {age:3d}”)★★★★★★★★★★Python 3.6+ 绝对首选
repr / str 手动拼接print(“调试:”, repr(obj))★★★☆☆★★☆☆☆调试复杂对象

强烈推荐写法(2025–2026 主流)

name = "张三"
age = 28
score = 88.75

print(f"{name} 今年 {age} 岁,本次考试 {score:.1f} 分")
# 张三 今年 28 岁,本次考试 88.8 分

print(f"{name:>10} | {age:^5} | {score:>6.1f}")
#      张三 |  28  |   88.8

5. 调试神技:print + 变量名自动显示(3.8+)

x = 42
y = [1, 2, 3]

print(f"{x=}")          # x=42
print(f"{y = }")        # y = [1, 2, 3]   (注意空格美观)
print(f"{x*2 + len(y)=}")   # x*2 + len(y)=87

6. 常见误区 & 注意事项

  1. print(1, 2, 3, sep=””) → 123(没有空格)
  2. print(“a”, end=””) 后不加 flush=True 时,在某些终端/重定向可能延迟显示
  3. print(a, b, c, sep=”, “, end=””) 最后不加 print() 会缺少换行
  4. 大量 print() 在生产环境中应换成 logging 模块
  5. Jupyter Notebook 中 print() 默认 end=’\n’,但大量输出建议用 tqdm 等进度条库

7. 总结:print() 进阶心法

  • 日常开发:f-string + sep/end 是最 pythonic 的组合
  • 调试:f”{var=}” + print(…, file=sys.stderr)
  • 进度/实时输出:end=’\r’ / ” + flush=True
  • 美观对齐:{var:>10} / {:^8} / {:.2f}
  • 生产环境:逐步迁移到 logging 或 rich / textual 等美化库

你平时用 print() 最多的是哪种场景?
调试、进度显示、日志、格式化报表,还是别的?
如果有特别想优化的输出样式,也可以贴出来,我们一起改成更优雅的写法~

文章已创建 4206

发表回复

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

相关文章

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

返回顶部