Python Print() 函数详解
核心提要 print() 是 Python 中最常用的内置函数,用于向控制台或文件输出信息。除了把文本显示在屏幕上,它还内置了几个非常实用的控制参数(sep、end、file 等),可以轻松实现数据排版和日志写入。
Python 基础:print() 函数详解(一)
Abstract: 核心提要
print()是 Python 中最常用的内置函数,用于向控制台或文件输出信息。除了把文本显示在屏幕上,它还内置了几个非常实用的控制参数(sep、end、file等),可以轻松实现数据排版和日志写入。
1. 基础语法结构
print(*objects, sep=' ', end='\n', file=sys.stdout, flush=False)
2. 核心参数与实例解析
参数一:*objects (输出对象)
print() 支持一次性打印多个对象,对象之间用逗号 , 分隔。Python 会自动将不同的数据类型(如字符串、整数、浮点数)转换为可显示的文本。
Python
# 输出单个字符串
print("Hello, Horace!")
# 输出多个混合类型的对象
part_name = "伺服电机"
torque = 2.5
print("机械部件:", part_name, "额定扭矩:", torque, "Nm")
# 输出: 机械部件: 伺服电机 额定扭矩: 2.5 Nm
参数二:sep (分隔符)
当打印多个对象时,默认使用空格将它们隔开。通过指定 sep 参数,可以自定义多个对象之间的连接符号。
Python
# 默认情况 (空格分隔)
print("底盘", "机械臂", "传感器")
# 输出: 底盘 机械臂 传感器
# 自定义分隔符 (例如格式化日期)
print("2026", "03", "25", sep="-")
# 输出: 2026-03-25
# 导出 CSV 格式数据时非常实用
print("ID", "Velocity", "Position", sep=",")
# 输出: ID,Velocity,Position
参数三:end (结尾符)
默认情况下,每次调用 print() 结束后都会自动添加一个换行符 \n。如果想让接下来的输出保持在同一行,或者想在末尾追加特定符号,可以修改 end 参数。
Python
# 默认行为(自动换行)
print("System Initializing")
print("Ready.")
# 输出:
# System Initializing
# Ready.
# 替换结尾符,实现不换行连续输出
print("Loading kinematics model", end=" ... ")
print("Done!")
# 输出: Loading kinematics model ... Done!
参数四:file (输出目标)
print() 默认将内容输出到终端屏幕 (sys.stdout)。通过修改 file 参数,可以直接将打印结果重定向并保存到本地文件中,这在记录程序运行日志时极为方便。
Python
# 必须先以写入模式 ('w' 或追加模式 'a') 打开文件
with open('robot_debug_log.txt', 'w', encoding='utf-8') as f:
print("WARNING: 关节 1 温度过高。", file=f)
print("Error Code: 404", file=f)
# 执行后控制台不会显示任何内容,这两行数据已被安全地写入同目录下的 txt 文件中。
Python 基础:print() 函数详解(二)
Abstract: 核心提要 本篇笔记主要补充
print()函数的进阶输出技巧。在引入更现代的format()和f-string之前,Python 早期最常用的是%占位符格式化。此外,掌握**转义字符(Escape Character)和原生字符串(Raw String)**能帮你处理许多复杂的文本打印需求。
1. 传统的 % 占位符格式化
通过在字符串中使用 % 后跟特定字母作为占位符,并在字符串末尾使用 % (变量元组),可以将变量动态插入到输出文本中。这种方法源自 C 语言的 printf。
常用占位符列表
| 占位符 | 数据类型 | 作用说明 |
|---|---|---|
%s |
String (字符串) | 插入文本字符串。 |
%d |
Integer (整数) | 插入十进制整数,会自动截断小数部分。 |
%f |
Float (浮点数) | 插入浮点数,默认保留 6 位小数。 |
%x |
Hex (十六进制) | 将整数以十六进制形式输出。 |
实例演示
name = "Horace"
age = 19
height = 1.785
# 基础替换
print("操作员:%s,年龄:%d" % (name, age))
# 输出: 操作员:Horace,年龄:19
# 精度控制 (指定保留2位小数)
print("系统记录身高为:%.2f 米" % height)
# 输出: 系统记录身高为:1.79 米 (注意会自动四舍五入)
# 占位符宽度与补零 (常用于格式化工号/编号)
uid = 42
print("用户ID: %05d" % uid)
# 输出: 用户ID: 00042
2. 常用转义字符 (Escape Characters)
当我们需要在 print() 中输出一些特殊的、无法直接用键盘打出来或者具有代码含义的字符(比如换行、引号本身),就需要使用反斜杠 \ 进行转义。
| 转义字符 | 含义 | 实例与说明 |
|---|---|---|
\n |
换行 (New line) | print("第一行\n第二行") |
\t |
制表符 (Tab) | print("ID\tName") 会自动对齐文本 |
\r |
回车 (Carriage return) | 光标回到行首。常用于覆盖当前行的输出(如进度条) |
\\ |
反斜杠本身 | print("C:\\Windows\\System") 输出路径时使用 |
\' 或 \" |
打印引号本身 | print("他说:\"Python很有趣\"") 避免与外部引号冲突 |
3. 原生字符串 (Raw String)
在处理正则表达式或者Windows 文件路径时,字符串中往往会包含大量的反斜杠 \。为了避免 Python 将其误认为是转义字符,可以在字符串引号的前面加一个字母 r 或 R,将其声明为“原生字符串”。
核心特性:原生字符串中的所有字符都只是普通字符,转义失效。
实例演示
Python
# 错误示范:\n 会被解析为换行,\t 会被解析为制表符
print("C:\new_folder\test.txt")
# 输出:
# C:
# ew_folder est.txt
# 正确示范:使用 r 声明原生字符串
print(r"C:\new_folder\test.txt")
# 输出: C:\new_folder\test.txt
Tip: 实践建议
虽然
%占位符格式化在很多老旧的代码库中依然常见,但在日常开发中,建议将其作为“能读懂即可”的知识储备。在编写新代码时,优先使用本系列笔记第一篇中提到的f-string或format(),它们的易读性和性能都更优秀。
Python 基础:format() 函数详解
Abstract: 核心提要
str.format()是 Python 中极其强大且优雅的字符串格式化方法。它通过字符串中的{}作为占位符,支持按位置、按关键字、甚至直接解析列表和字典来进行动态数据替换。同时,它还内置了强大的排版对齐功能。
1. 基础替换逻辑
format() 最基础的用法是将后面的参数动态塞进字符串的 {} 中。
1.1 默认顺序替换
最简单的用法,{} 的数量与 format() 中的参数数量和顺序一致。
print("电机型号:{},额定转速:{} rpm".format("MG-400", 3000))
# 输出: 电机型号:MG-400,额定转速:3000 rpm
1.2 按索引位置替换
通过在 {} 中填入数字索引,可以打乱顺序,甚至重复使用同一个参数。
# 0代表第一个参数,1代表第二个参数
print("A股代码 {1} 代表的上市公司是 {0}。关注 {0} 的近期走势。".format("比亚迪", "002594"))
# 输出: A股代码 002594 代表的上市公司是 比亚迪。关注 比亚迪 的近期走势。
1.3 按关键字替换
给参数命名,使代码的语义更加清晰,不用再去数索引位置。
print("机械臂负载: {payload}kg, 自由度: {dof}".format(payload=5, dof=6))
# 输出: 机械臂负载: 5kg, 自由度: 6
2. 进阶替换:解析列表与字典
在处理结构化数据时,format() 可以直接读取列表的索引或字典的键值。
2.1 传入列表 (List)
env_info = ["Isaac Lab", "强化学习仿真"]
# 注意:0代表format里的第一个参数(即env_info列表),[0]和[1]代表列表内的元素
print("平台: {0[0]}, 任务: {0[1]}".format(env_info))
# 输出: 平台: Isaac Lab, 任务: 强化学习仿真
2.2 传入字典 (Dictionary)与解包
使用 ** 可以将字典直接解包(Unpack)并传入 format(),这在处理 JSON 数据或 API 返回结果时极其方便。
stock_data = {"name": "宁德时代", "price": 185.50}
# 直接使用字典的键作为占位符
print("股票名称: {name}, 当前价格: {price}".format(**stock_data))
# 输出: 股票名称: 宁德时代, 当前价格: 185.50
3. 格式化转换 (数字与符号)
在 {} 中加入冒号 :,就可以调用 format() 强大的数字格式化功能。
| 语法 | 作用说明 | 实例代码 | 输出结果 |
|---|---|---|---|
:.nf |
保留 n 位小数 (四舍五入) | "{:.2f}".format(3.14159) |
3.14 |
:.n% |
转为百分比,保留 n 位小数 | "{:.1%}".format(0.8753) |
87.5% |
:, |
千位分隔符 (财务数据常用) | "{:,}".format(12500000) |
12,500,000 |
:+.2f |
强制显示正负号 | "{:+.2f}".format(45.2) |
+45.20 |
4. 对齐与填充 (排版利器)
当我们需要在终端打印整齐的表格时,对齐功能就派上用场了。
标准语法: {[索引/关键字]:[填充字符][对齐方式][宽度]}
-
<:左对齐 -
>:右对齐 -
^:居中对齐
# 1. 基础对齐 (默认用空格填充空白处)
print("|{:>10}|".format("右对齐")) # 输出: | 右对齐|
print("|{:<10}|".format("左对齐")) # 输出: |左对齐 |
print("|{:^10}|".format("居中对齐")) # 输出: | 居中对齐 |
# 2. 指定字符填充 (比如用 * 或 -)
print("{:-^20}".format(" 传感器数据 "))
# 输出: ------ 传感器数据 ------
# 3. 组合使用:字典解包 + 宽度对齐
item = {"name": "减速器", "id": 42}
# name 左对齐占10个字符,id 右对齐占5个字符并在前面补零
print("零件名:{name:<10} 编号:{id:0>5}".format(**item))
# 输出: 零件名:减速器 编号:00042
“{}“.format()函数的详细用法
两种写法:
>>>a="张"
>>>b="三"
>>>print("hello,{}{}".format(a,b)) #大多用此格式,将a变量赋予第一个{}中,将b变量赋予第二个{}中,
>>>print(f'hello,{a}{b}')
hello,张三
hello,张三
小数保留
>>>'{:.2f}'.format(0.4444) #保留小数点后两位
'0.44'
>>>'{value:.2f}'.format(value=0.6666)
'0.67'
>>>'{:.4%}'.format(0.33333) #百分比格式,并保留四位小数
'33.3330%'
进制转换
>>>print('{0:x}'.format(1000) ) # 转换成十六进制
>>>print('{0:o}'.format(9876) ) # 转换成八进制
>>>print('{0:b}'.format(7878) ) # 转换成二进制
3e8
23224
1111011000110
对齐方式
>>>print("{:>10}".format(123)) # >代表右对齐,长度为10
123
>>>print("{:=>10}".format(123)) # >代表右对齐,长度为10,不够时=<mark>填充
=======123
>>>print("{:=<20}".format(123)) # <代表左对齐,长度为20,不够时</mark>=填充
123=================
>>>print("{:-^20}".format(123)) # ^代表剧中对齐,长度为20,不够时--填充
--------123---------
>>>print("{:-^20,}".format(100000)) # ^代表剧中对齐,长度为20,不够时--填充, ,(英文状态下)代表千为分隔符
------100,000-------
Python 字符串:format() 格式化函数
Abstract: 核心提要 自 Python 2.6 起,新增了一种格式化字符串的函数
str.format()。它增强了字符串格式化的功能,基本语法是通过{}和:来代替传统的%占位符。核心优势:
- 接受不限个参数,位置可以不按顺序。
- 语法更加直观,支持复杂的数据结构解包与精细排版。
1. 基础替换语法
format() 可以通过多种方式将参数映射到字符串的 {} 中。
1.1 不带编号(按默认顺序)
print("{} {}".format("hello", "world"))
# 输出: hello world
# 参数数量可以多于占位符,但不能少于
print("{} {}".format("hello", "world", "python"))
# 输出: hello world
1.2 带数字编号(按位置索引)
数字代表 format() 传入参数的索引位置。这种方式可以打乱顺序,也可以多次调用同一个参数。
print("{0} {1}".format("hello", "world"))
# 输出: hello world
print("{1} {0} {1}".format("hello", "world"))
# 输出: world hello world
1.3 带关键字(按名称匹配)
给参数显式命名,代码语义最清晰,完全不需要考虑参数传递的顺序。
print("网站名:{name}, 地址 {url}".format(name="菜鸟教程", url="[www.runoob.com](https://www.runoob.com)"))
# 输出: 网站名:菜鸟教程, 地址 [www.runoob.com](https://www.runoob.com)
2. 进阶用法:传入复合数据类型
除了基本类型,format() 还支持直接从列表和字典中提取数据。
2.1 传入字典 (Dictionary)
使用 ** 操作符可以将字典解包,并利用字典的键名作为 {} 中的关键字。
site = {"name": "菜鸟教程", "url": "[www.runoob.com](https://www.runoob.com)"}
print("网站名:{name}, 地址 {url}".format(**site))
# 输出: 网站名:菜鸟教程, 地址 [www.runoob.com](https://www.runoob.com)
2.2 传入列表 (List)
通过索引列表的方式提取值。注意,传入列表本身时,它在 format() 中的位置索引通常是 0。
my_list = ['菜鸟教程', '[www.runoob.com](https://www.runoob.com)']
# 0 代表传入的第一个参数(即my_list),[0]和[1]代表列表内的元素
print("网站名:{0[0]}, 地址 {0[1]}".format(my_list))
# 输出: 网站名:菜鸟教程, 地址 [www.runoob.com](https://www.runoob.com)
3. 数字格式化与排版 (速查表)
在 {} 中加入冒号 : 可以引导格式化规则,常用于控制数字的精度、对齐和进制转换。
| 数字 | 格式代码 | 输出结果 | 描述说明 |
|---|---|---|---|
3.1415926 |
{:.2f} |
3.14 |
保留小数点后两位 (四舍五入) |
3.1415926 |
{:+.2f} |
+3.14 |
强制带符号保留小数点后两位 |
-1 |
{:+.2f} |
-1.00 |
负数带符号保留小数点后两位 |
2.71828 |
{:.0f} |
3 |
不带小数 (四舍五入至整数) |
5 |
{:0>2d} |
05 |
数字补零 (右对齐,总宽度为2) |
5 |
{:x<4d} |
5xxx |
字符填充 (左对齐,用x填充,总宽度为4) |
1000000 |
{:,} |
1,000,000 |
添加千位分隔符 (财务/金融格式) |
0.25 |
{:.2%} |
25.00% |
转换为百分比格式 |
1000000000 |
{:.2e} |
1.00e+09 |
科学计数法 (指数记法) |
13 |
{:<10d} |
13 |
左对齐 (总宽度为10) |
13 |
{:^10d} |
13 |
居中对齐 (总宽度为10) |
Info: 符号说明
^,<,>分别代表居中、左对齐、右对齐。后面带宽度,例如
{:>8}表示右对齐且总宽度为8。冒号
:后面可以紧跟填充的字符,只能是一个字符,默认是空格。
3.1 进制转换
# b:二进制, d:十进制, o:八进制, x:十六进制
print("二进制: {:b}".format(11)) # 输出: 1011
print("十进制: {:d}".format(11)) # 输出: 11
print("八进制: {:o}".format(11)) # 输出: 13
print("十六进制: {:x}".format(11)) # 输出: b
4. 特殊情况:转义大括号 {}
如果我们需要在格式化后的字符串中直接打印大括号 {} 本身,需要使用双大括号 {{ 和 }} 来进行转义。
print("{} 对应的位置是 {{0}}".format("runoob"))
# 输出: runoob 对应的位置是 {0}