Python中的输出函数

一、前言

在 Python 编程中,输出信息是最基础也最重要的操作之一。无论是打印"Hello World",还是调试复杂逻辑,亦或是记录系统运行状态,都离不开"输出"。

但你知道吗?

很多开发者只用 print(),却不知道它只是冰山一角。

真正的专业开发,需要根据场景选择合适的输出方式。

本文将带你全面了解 Python 中的输出手段: ✅ print() 的正确用法与高级技巧

✅ 字符串格式化(f-string / format / %)

✅ 为什么生产环境不能只用 print()

✅ 如何使用 logging 模块实现专业日志管理

✅ 调试输出的最佳实践


二、基础输出:print() 函数详解

1. 基本语法

python 复制代码
print(*objects, sep=' ', end='\n', file=sys.stdout, flush=False)
  • *objects:要输出的内容(可多个)
  • sep:分隔符,默认空格 ' '
  • end:结尾字符,默认换行 '\n'
  • file:输出目标,默认标准输出(控制台)
  • flush:是否立即刷新缓冲区

2. 常见用法示例

python 复制代码
# 基础输出
print("Hello", "World")  # Hello World

# 自定义分隔符
print("a", "b", "c", sep="-")  # a-b-c

# 不换行输出
print("Loading", end="...")
print("Done!")  # Loading...Done!

# 输出到文件
with open("output.txt", "w") as f:
    print("This is saved to file.", file=f)

3. 高级技巧:动态刷新进度条

python 复制代码
import time

for i in range(101):
    print(f"\rProgress: {i}%", end="", flush=True)
    time.sleep(0.05)
print("\nComplete!")

\r 回到行首,flush=True 确保立即显示


三、字符串格式化:让输出更美观

print() 负责"输出",而格式化决定"怎么展示"。

1. f-string(推荐,Python 3.6+)

python 复制代码
name = "Alice"
age = 25
print(f"姓名:{name},年龄:{age}")
# 支持表达式
print(f"明年年龄:{age + 1}")

2. str.format()

python 复制代码
print("姓名:{},年龄:{}".format(name, age))
print("姓名:{0},年龄:{1},{0} 很棒!".format(name, age))

3. % 格式化(旧式,不推荐新项目使用)

python 复制代码
print("姓名:%s,年龄:%d" % (name, age))

📌 建议 :新项目一律使用 f-string,简洁、高效、可读性强!


四、为什么生产环境不能只用 print()?

虽然 print() 简单好用,但在实际项目中存在严重问题:

问题 说明
❌ 无法分级 所有信息混在一起,无法区分"调试""警告""错误"
❌ 无法关闭 上线后需手动删除或注释大量 print
❌ 无时间戳 无法知道日志何时产生
❌ 不支持文件轮转 日志文件越来越大,难以管理
❌ 多线程/进程下混乱 输出顺序不可控

💡 正确做法:使用 logging 模块


五、专业输出:logging 模块实战

logging 是 Python 内置的日志系统,支持分级、格式化、多输出目标等。

1. 基础用法

python 复制代码
import logging

# 配置日志格式
logging.basicConfig(
    level=logging.DEBUG,
    format='%(asctime)s - %(levelname)s - %(message)s'
)

logging.debug("调试信息")
logging.info("一般信息")
logging.warning("警告信息")
logging.error("错误信息")
logging.critical("严重错误")

输出示例:

复制代码
2025-11-03 14:30:01,234 - DEBUG - 调试信息
2025-11-03 14:30:01,235 - INFO - 一般信息
2025-11-03 14:30:01,236 - WARNING - 警告信息
...

2. 输出到文件 + 控制台

python 复制代码
import logging

logger = logging.getLogger("my_app")
logger.setLevel(logging.DEBUG)

# 控制台处理器
ch = logging.StreamHandler()
ch.setLevel(logging.INFO)

# 文件处理器
fh = logging.FileHandler("app.log")
fh.setLevel(logging.DEBUG)

# 设置格式
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
ch.setFormatter(formatter)
fh.setFormatter(formatter)

logger.addHandler(ch)
logger.addHandler(fh)

# 使用
logger.info("应用启动")
logger.debug("详细调试信息已写入文件")

3. 日志级别说明

级别 用途
DEBUG 详细信息,通常仅用于诊断问题
INFO 确认程序按预期工作
WARNING 表示意外情况,但程序仍可运行
ERROR 更严重的问题,部分功能失败
CRITICAL 严重错误,程序可能无法继续运行

✅ 开发时设为 DEBUG,上线后改为 WARNINGERROR,无需改代码!


六、调试输出最佳实践

✅ 推荐做法:

  1. 开发阶段 :可用 print() 快速验证,但完成后应替换为 logging.debug()

  2. 项目初期 :尽早引入 logging,避免后期大规模重构

  3. 不要 print 敏感信息:如密码、密钥、用户隐私

  4. 使用结构化日志 (进阶):

    python 复制代码
    import json
    logging.info(json.dumps({"user_id": 123, "action": "login"}))

❌ 避免:

  • 在循环中频繁 print()(影响性能)
  • 提交代码时保留调试用的 print()
  • print() 替代异常处理

七、其他输出方式(补充)

1. sys.stdout.write()(底层控制)

python 复制代码
import sys
sys.stdout.write("直接写入标准输出\n")

⚠️ 不自动换行,需手动加 \n

2. 第三方库:rich(美化终端输出)

bash 复制代码
pip install rich
python 复制代码
from rich.console import Console
console = Console()
console.print("Hello", style="bold red")
console.print("[green]支持[/green] [blue]Markdown[/blue]!")

🎨 适合 CLI 工具、演示项目


八、总结

场景 推荐输出方式
学习/简单脚本 print() + f-string
项目开发/调试 logging.debug()
生产环境 logging(INFO/WARNING/ERROR)
终端美化 rich
性能敏感场景 避免频繁输出,或使用缓冲

🌟 记住
print() 是入门的钥匙,
logging 是专业的标配。


九、结语

感谢您的阅读!如果你有任何疑问或想要分享的经验,请在评论区留言交流!

相关推荐
这个DBA有点耶2 小时前
NULL不是空——数据库里最反直觉的设计,90%新人踩过的坑
数据库·mysql·代码规范
用户8356290780512 小时前
Python 实现 PDF 文件加密与解密方法
后端·python
用户8356290780512 小时前
使用 Python 冻结与拆分 Excel 窗格教程
后端·python
这个DBA有点耶4 小时前
AI写的SQL跑崩了生产库,这锅谁背?
数据库·人工智能·程序员
镜舟科技5 小时前
Databricks 再提 LTAP,AI 时代的数据底座为何重回大一统叙事?
数据库·架构·agent
Databend6 小时前
从湖仓升级为 Agent 时代的数据控制面,Snowflake 和 Databricks 有哪些布局
大数据·数据库·agent
ClouGence9 小时前
SQL Server CDC 能放到 Always On 备库读吗?一文讲透原理与实践
数据库·sql server
你好潘先生10 小时前
别再记命令了,用 yeero do 说句人话就能跑脚本,而且不烧 token
服务器·python·命令行
Agent_大师11 小时前
WebSocket 行情重连成功,K线缺口不会自动消失
python
荣码11 小时前
LLM结构化输出:让AI返回JSON而不是废话,我踩了4个坑
java·python