广告

Python中print的常见用法详解:从基础到进阶的实战指南

基础用法入门

print 的基本语法

要点1:在 Python 3 中,print 是一个函数,必须使用圆括号将要输出的内容包裹起来,例如 print("你好,世界")。默认情况下,输出的内容会在末尾添加一个换行符,便于逐行显示。这是入门的核心规则,也是后续格式化与扩展的基础。

此外,print 可以接收任意数量的参数,它们之间会被一个空格自动分隔,除非通过参数显式改变分隔符。示例代码如下,帮助你快速理解输出行为。

print("Hello", "World")
print(1, 2, 3.5, True)

第一条要记住的特性是 end 参数决定输出结束时的字符,默认为换行。你可以通过 end="" 来实现连续输出在同一行,或者自定义结束符。

输出不同数据类型

print 会对非字符串参数自动转换,这使得你可以直接打印数字、布尔值、列表等而不需要手动转换为字符串。在调试阶段,这个特性尤为便利。

如果你希望控制对象如何被打印,可以通过 定义对象的 __str__ 或 __repr__ 方法来定制输出文本。

class Point:def __init__(self, x, y):self.x = xself.y = ydef __str__(self):return f"Point({self.x}, {self.y})"p = Point(3, 4)
print(p)  # 调用 __str__ 返回自定义文本

输出格式控制与格式化

格式化字符串与 f-strings

从 Python 3.6 开始,f-strings 是最简洁的格式化方式,在字符串前加上字母 f,并在花括号中放置变量名或表达式,效果直观且性能优秀。

如果需要更复杂的格式,如指定宽度、对齐、精度等,可以在大括号内使用格式化说明符,避免冗长的 format 调用

name = "Alice"
age = 30
print(f"姓名:{name}, 年龄:{age}")  # 直观明了
print(f"{name:<10} | 年龄 {age:>3}")  # 宽度与对齐示例

传统的 format 方法

format 方法与占位符的组合在早期版本中广泛使用,兼容性好,适合需要动态构建复杂字符串的场景。

通过位置参数或关键字参数,可以灵活地替换文本中的占位符,适用于日志模板或本地化输出。

template = "NAME: {}, AGE: {}"
print(template.format("Bob", 28))template2 = "NAME: {n}, CITY: {c}"
print(template2.format(n="Carol", c="深圳"))

输出到文件与重定向

file 参数写入文件

print 的 file 参数可以把输出定向到任何具备 write 方法的对象,常见用途是写入文本文件或日志设备。

使用时,只需先打开目标文件,然后将文件对象传给 file 参数,确保写入完成后关闭文件以避免资源泄漏。

with open("log.txt", "w", encoding="utf-8") as f:print("启动日志", file=f)print("传感器读取成功", file=f)

通过重定向到文件/ stdout

在命令行层面,可以使用标准输出重定向将 print 的输出保存到文件,这在批处理脚本和数据日志中非常常见。

示例:运行脚本后将输出存入文件,而不修改脚本本身的行为。

# 假设脚本 print 数据
print("数据点:", 42)

命令行用法示例(与 Python 脚本无关): python your_script.py > output.txt,将 stdout 写入 output.txt。

编码与跨平台输出

输出中文与编码注意

Python 3 默认使用 UTF-8 编码,这使得直接输出中文通常没有问题。但在某些终端或日志系统中,显示编码可能不一致,需要确认控制台或文件的编码设置。

如果遇到编码错误,可以显式指定文件编码为 UTF-8,以确保写入文本的正确性。

with open("messages.txt", "w", encoding="utf-8") as f:print("日志:系统启动成功,时间:2025-08-24 10:00:00", file=f)

跨平台差异与控制台编码

不同操作系统的默认控制台实现不同,可能影响字符显示、换行符等细节。在进行跨平台开发时,尽量使用通用的输出格式和显式的换行处理以提升兼容性。

Python中print的常见用法详解:从基础到进阶的实战指南

对于需要在 Windows 和 Unix 系统中一致显示的场景,优先使用 UTF-8 编码,并在必要时进行环境检测。

进阶用法:自定义打印行为

自定义对象的打印输出

通过实现 __str__,你可以控制对象被 print 时的文本表示,这对调试和日志尤为重要。

复杂对象可以结合多行文本或结构化格式输出,帮助快速定位问题。

class Sensor:def __init__(self, id, value):self.id = idself.value = valuedef __str__(self):return f"Sensor(id={self.id}, value={self.value:.2f})"s = Sensor("TX-01", 23.678)
print(s)

自定义输出样式与日志风格

结合日期时间、日志级别等信息,可以实现统一的日志输出风格,便于过滤与分析。

在实际系统中,很多人会创建一个小型日志函数,将时间戳、等级和消息合并后输出,这也是 print 的进阶应用之一。

from datetime import datetimedef log(msg, level="INFO"):t = datetime.now().strftime("%Y-%m-%d %H:%M:%S")print(f"[{t}] {level}: {msg}")log("网络连接已建立", "INFO")

在硬件和嵌入式场景中的应用

通过串口或设备接口输出日志

在嵌入式开发或设备监控中,常需要将文本日志输出到串口,以便在终端或调试工具中查看实时信息。

实现方式通常是将输出定向到一个具备 write 方法的对象,或者通过串口驱动的封装类实现文本编码后写入。

# 示例:将文本写入一个简单的串口模拟对象
class SerialMock:def __init__(self):self.buffer = ""def write(self, s):self.buffer += sreturn len(s)ser = SerialMock()
print("温度: 23.5C", file=ser)  # 注意:需要确保 write 接受字符串文本
print("温度: 23.5C")  # 仍然输出到控制台
print("串口缓冲区内容:", ser.buffer)

示例:将输出写入串口的实际要点

要点在于编码和写入速率的匹配,确保你的串口设备期望的编码与文本格式一致,并避免过于频繁的写入导致缓冲区拥塞。

在微控制器与电脑之间进行数据传输时,通常需要对输出进行时间间隔控制,并使用高效的缓冲策略来维持稳定的调试信息流。

广告

后端开发标签