在 Python 编程中,print()函数是最基础、最常用的输出工具,无论是调试代码、查看变量值,还是展示程序结果,都离不开它。但很多初学者只掌握了print("Hello World")这种简单用法,却不知道它还有诸多灵活的参数和实用技巧。本文将从基础到进阶,全面拆解print()函数的用法,结合实例帮你彻底掌握!
一、print () 函数核心作用
print()函数的核心功能是将指定内容输出到控制台(默认)或其他指定位置(如文件),是 Python 中用于 "信息展示" 的核心工具。
二、基础用法:直接输出单个内容
最简洁的用法的是直接输出单个字符串、数字、变量等。
语法格式:
print(输出内容)
示例 1:输出字符串
单引号 / 双引号 / 三引号均可
# 单引号、双引号无区别
print("Hello Python!") # 输出:Hello Python!
print('Python 入门教程') # 输出:Python 入门教程
# 三引号支持多行字符串
print("""这是第一行
这是第二行
这是多行字符串输出""")
示例 2:输出数字、变量或表达式结果
# 输出数字
print(123) # 输出:123
print(3.14159) # 输出:3.14159
# 输出变量
name = "CSDN博主"
print(name) # 输出:CSDN博主
# 输出表达式结果
a = 10
b = 20
print(a + b) # 输出:30(直接计算表达式并输出结果)
三、关键特性:多参数输出与字符串自动拼接
print()函数支持同时传入多个参数(用逗号分隔),也支持相邻字符串字面量自动拼接,这是初学者容易混淆但非常实用的特性。
1. 多参数输出:默认空格分隔
当print()传入多个参数时,参数之间会默认用空格分隔,无需手动添加空格。
示例:
# 多字符串参数
print("哈", "基", "米") # 输出:哈 基 米(默认空格分隔)
# 混合类型参数(字符串+变量+数字)
name = "小明"
age = 20
print("姓名:", name, "年龄:", age) # 输出:姓名: 小明 年龄: 20
2. 字符串自动拼接:相邻字面量无需加号
如果直接将多个字符串字面量(用引号包裹的内容)相邻写在print()中,无需使用+号,Python 会自动将它们拼接成一个字符串。
示例:
# 单引号、双引号混合相邻,自动拼接
print("123""456"'789') # 输出:123456789(无分隔符,直接拼接)
# 注意:变量不能直接相邻拼接,会报错!
str1 = "abc"
str2 = "def"
# print(str1 str2) # 报错:SyntaxError(变量必须用+号或逗号连接)
print(str1 + str2) # 正确:输出abcdef(用+号拼接变量)
两者区别总结:
| 用法 | 示例 | 输出结果 | 核心区别 |
|---|---|---|---|
| 多参数(逗号分隔) | print("a", "b", 123) |
a b 123 |
不同类型参数可混传,默认空格分隔 |
| 字符串自动拼接 | print("a""b""123") |
ab123 |
仅支持字符串字面量,无分隔符直接拼接 |
四、自定义分隔符:sep 参数
默认情况下,多参数输出用空格分隔,但print()的sep参数允许我们自定义分隔符(如逗号、横线、波浪线等),sep 参数必须放在所有位置参数之后。
语法格式:
print(参数1, 参数2, 参数3, ..., sep="自定义分隔符")
示例:
# 用波浪线分隔
print("南", "北", "绿", "豆", sep="~") # 输出:南~北~绿~豆
# 用逗号+空格分隔(模拟CSV格式)
print("姓名", "年龄", "城市", sep=", ") # 输出:姓名, 年龄, 城市
# 用空字符串分隔(等同于字符串拼接,但支持多类型参数)
print("Hello", "Python", sep="") # 输出:HelloPython
# 用横线分隔
print("2025", "11", "29", sep="-") # 输出:2025-11-29
注意事项:
-
sep只能接收字符串类型的值,不能是数字(如sep=123会报错); -
sep必须放在最后一个位置参数之后(比如print(a, b, sep="~")正确,print(sep="~", a, b)报错)。
五、控制结尾字符:end 参数
默认情况下,每个print()函数执行后都会自动换行(结尾添加\n换行符),但end参数允许我们自定义结尾字符,实现 "不换行输出" 或 "自定义结尾符号"。
语法格式:
print(输出内容, end="自定义结尾字符")
示例:
# 1. 自定义结尾为冒号(替代默认换行)
print("我是", end=":")
print("奶龙") # 输出:我是:奶龙(两行输出合并为一行)
# 2. 结尾添加空格(多print输出不换行且空格分隔)
print("Python", end=" ")
print("Java", end=" ")
print("C++") # 输出:Python Java C++
# 3. 结尾添加换行符(默认行为,可显式指定)
print("第一行", end="\n")
print("第二行") # 输出:
# 第一行
# 第二行
# 4. 结尾添加特殊符号
print("加载中", end="...")
print("完成") # 输出:加载中...完成
六、字符串中插入变量
1、格式化:str.format() 方法
str.format() 格式化方法,用 { } 作为占位符,通过 .format() 填充,支持多种参数格式。
基础用法:
name = "Bob"
age = 20
print("My name is {}, and I am {} years old.".format(name,age))
# My name is Bob, and I am 20 years old.
进阶用法:
位置参数:{0} 、{1} 指定顺序
print("My name is {1}, and I am {0} years old.".format(20,"Bob"))
# My name is Bob, and I am 20 years old.
关键字参数:{name}、{age} 直接使用变量名
print("My name is {name}, and I am {age} years old.".format(name="Charlie", age=35))
# My name is Charlie, and I am 35 years old.
格式化数值:控制小数位数
格式语法:{数值:.nf}(n 是要保留的小数位数,f 表示浮点数格式),自动四舍五入,不足位数补 0,多余位数截断(四舍五入规则)。
print("The value is {:.2f}".format(3.14159)) # 保留两位小数
# 输出:The value is 3.14
print("保留3位小数(不足补0):{:.3f}".format(5.2))
# 输出:保留3位小数(不足补0):5.200
print("整数转 2 位小数格式:{:.2f}".format(10))
# 输出:整数转 2 位小数格式:10.00
2、最推荐:f-string(Python 3.6+)
在字符串前加 f ,直接在 {} 里插入变量,简洁高效,可读性强,是Python 3.6+的官方推荐方式。
基础用法:
name = "Eve"
age = 22
print(f"My name is {name}, and I am {age} years old.")
# My name is Eve, and I am 22 years old.
格式化数值:
height = 1.724
print(f"My height is {height:.2f} meters.") # 保留两位小数
# My height is 1.72 meters.
表达式计算:
age = 22
print(f"In 5 years, I will be {age + 5} years old.")
# In 5 years, I will be 27 years old.
变量名+值输出 (调试神器)
name = "Jack"
age = 21
print(f"{name=} {age=}") # 输出: name='Jack' age=21
七、进阶用法:file 与 flush 参数
除了基础的输出控制,print()还有两个实用的进阶参数:file(指定输出目标)和flush(强制刷新缓冲区)。
1. file 参数:输出到文件(而非控制台)
print() 函数中 file 参数默认值为 sys.stdout,将内容输出到控制台,但可通过 file 参数指定文件对象,将内容直接写入文件,而不输出在控制台。
示例:
# 1. 打开文件(如果不存在则创建,存在则覆盖)
# w 表示写入模式(覆盖)
with open("output.txt", "w", encoding="utf-8") as f:
# 输出到文件 文件对象f即为output.txt文件
print("这是写入文件的内容", file=f)
print("Python print()函数教程", file=f)
# 验证:读取文件内容
# r 表示只读模式
with open("output.txt", "r", encoding="utf-8") as f:
content = f.read() # 读取文件对象f的全部内容
print(content) # 控制台输出文件内容
# 这是写入文件的内容
# Python print()函数教程
说明:
-
open(文件名, 打开模式, encoding="utf-8")会帮我们 "打开 / 创建" 一个文件,并返回一个可操作的 "文件对象"(比如用变量f接收)。 -
file参数要求传入的是「文件对象」,不是单纯的文件名(比如不能写file="output.txt",会报错)。
2. flush 参数:强制刷新缓冲区
在默认情况下,print()输出会先存入缓冲区,等满足条件后再批量输出(遇到换行符、缓冲区满、程序结束等),这样减少 I/O 操作次数,提升程序效率。flush=True可强制立即刷新缓冲区,无视默认触发条件,立即输出,不等待,适用于实时输出场景(如进度条、实时日志)。
示例(默认):
import time
# 不使用flush(默认缓冲,可能一次性输出)
print("加载中", end="")
time.sleep(2) # 暂停2秒
print("完成") # 2秒后一次性输出:加载中完成
实际效果:
暂停 2 秒后,才一次性显示「加载中... 完成」------ 因为 "加载中..." 被存到了缓冲区,没立刻输出,直到第二个print()触发了缓冲区刷新,才一起显示。
示例(flush刷新):
import time
# 使用flush=True(强制立刻输出)
print("加载中...", end="", flush=True) # 立刻输出"加载中...",不缓冲
time.sleep(2) # 暂停2秒,此时"加载中..."已经显示在控制台了
print("完成")
实际效果:
立刻显示「加载中...」,暂停 2 秒后,在后面追加「完成」
注意:
-
flush参数是布尔值(只有True和False两个值),不能写flush=1或flush="True"(会报错); -
不用所有场景都加
flush=True:默认缓冲是为了提升效率,只有需要 "实时输出" 时才用,否则会增加 I/O 操作,降低程序速度; -
flush和end常一起用:因为end=""会取消默认的换行符\n(而\n会触发缓冲区刷新),所以需要flush=True来强制立刻输出。 -
建议在终端环境中运行:直接在IDE(如PyCharm)中运行,默认情况可能与flush刷新效果一致,IDE通常会自动设置
-u标志(无缓冲模式),所以默认会立即显示"加载中...",然后等待2秒后显示"完成"
八、总结
print()函数看似简单,但其灵活的参数(sep、end、file等)能满足大部分输出场景。
本文总结核心要点:
-
基础用法:输出字符串、数字、变量、表达式,支持多行字符串;
-
多参数输出:默认空格分隔,支持混合类型;
-
字符串自动拼接:相邻字面量无需 + 号,直接合并;
-
自定义控制:
sep改分隔符,end改结尾字符; -
字符串格式化:推荐的
f-string方式,直接在{}中插入变量,简洁高效。 -
进阶用法:
file输出到文件,flush强制实时刷新。
掌握这些用法后,你可以更灵活地使用print()函数,无论是日常调试还是程序交互展示,都能游刃有余。如果有其他疑问,欢迎在评论区交流!