Python print()函数end与sep参数详解及缓冲区刷新问题

码头散步
码头散步
发布时间:2026-10-14| 6人浏览过
原创

本文详细解析Python中print()函数的end和sep参数用法。end参数用于控制输出结尾,默认为换行符\n,可设为空字符串或空格以改变输出格式;sep参数用于分隔多个输出对象。此外,文章指出了在PyCharm等环境中因缓冲区机制导致的输出延迟问题,并提供了使用flush参数或sys.stdout.flush()强制刷新的解决方案。

在近期进行的Python学习过程中,我对print()这一打印输出函数进行了更深入的研究。

在Python 2.6版本中,使用print语句输出内容时必须使用引号包裹。

到了Python 3.0版本,print被修改为函数形式,语法由引号改为括号,即print()。

使用print()函数进行打印输出时,默认行为是在输出的文本末尾添加换行符。


i=1
while i<10:
    print(i)
    i+=1
print("循环结束")

#程序运行结果
1
2
3
4
5
6
7
8
9
循环结束

从语法结构来看,Python 3.0中print函数的标准格式如下:


print([object,…]],sep=' ‘][,end='\n'][,file=sys.stdout])

需要注意以下几点:

1、方括号[ ]内的参数为可选参数。

2、等号=右侧的值为各参数的默认取值。

file参数

该参数指定文本输出的目标文件、标准流或其他类似文件对象;若未传递该参数,则默认输出至sys.stdout。

sep参数

该参数用于分隔打印输出中的多个对象;若未传递,默认分隔符为一个空格。


print('a','b','c','d','e')

#程序运行结果
a b c d e

print('a','b','c','d','e',sep="下一个字母:")

#程序运行结果
a下一个字母:b下一个字母:c下一个字母:d下一个字母:e

end参数

该参数用于设定打印输出文本的结尾,其默认值为换行符\n。若传递一个空字符串,将避免在打印文本末尾移动到下一行,即后续的print语句会将内容追加到当前输出行的末尾。


i=1
while i<10:
    print(i,end=" ")
    i+=1
print("循环结束")

#程序运行结果
1 2 3 4 5 6 7 8 9 循环结束

观察可知,每次调用print()时,默认情况下输出并未换行(指未使用默认换行符时的行为,或指通过end参数控制后的效果,原文语境稍显模糊,此处忠实还原:可以看到每次print()的打印输出并未换行)。

接下来,我们通过两段代码来进一步学习end参数的具体作用。

代码一:设定end=" ",即每次打印输出后以空格作为结尾。


i=1
print("九九乘法表")
while i<10:
    j=1
    while j<=i:
        print("{}*{}={}".format(i,j,i*j),end="")#打印输出后以空格结尾
        j+=1
    print() #未设定end参数,默认end="\n"
    i+=1
print("乘法表结束")

代码二:未设定end参数,采用默认值end="\n",即每次打印输出后自动换行。


i=1
print("九九乘法表")
while i<10:
    j=1
    while j<=i:
        print("{}*{}={}".format(i,j,i*j))#默认end="\n"
        j+=1
    print()
    i+=1
print("乘法表结束")

#程序运行结果
九九乘法表
1*1=1

2*1=2
2*2=4

3*1=3
3*2=6
3*3=9

4*1=4
4*2=8
4*3=12
4*4=16

5*1=5
5*2=10
5*3=15
5*4=20
5*5=25

6*1=6
6*2=12
6*3=18
6*4=24
6*5=30
6*6=36

7*1=7
7*2=14
7*3=21
7*4=28
7*5=35
7*6=42
7*7=49

8*1=8
8*2=16
8*3=24
8*4=32
8*5=40
8*6=48
8*7=56
8*8=64


9*1=9
9*2=18
9*3=27
9*4=36
9*5=45
9*6=54
9*7=63
9*8=72
9*9=81

乘法表结束

通过对比上述两段代码的运行结果,我们可以清晰地认识到print()函数中end参数的作用。

补充说明:关于Python函数print()参数end可能存在的坑及解决方法。

Python内置函数print()的语法定义如下:

虽然sep参数和file参数同样具有重要用途,但通常使用较为常规,本文重点介绍end参数以及flush参数。使用print()函数输出给定值后,默认以换行符结束,例如:

如果希望循环输出的内容显示在同一行中,可以修改print()函数的end参数,将其指定为不包含换行符和回车符的字符串,例如:

然而,这种用法可能会带来一个隐藏的陷阱。

函数print()并非直接将内容输出到屏幕(当file参数为默认值时),而是先将内容输出到缓冲区,待缓冲区满或程序运行结束后再刷新到屏幕上,除非采取其他措施强制刷新并清空缓冲区(或输出流)。

以下程序本意是每隔0.5秒输出一个圆点以模拟动态进度条效果,在IDLE或Spyder中运行正常。但在PyCharm和cmd环境中并未实现动画效果,而是等待5秒后一次性输出所有内容。

正如前述,若有其他措施能强制刷新并清空缓存,即可避免此问题。一种方法是使用print()函数的flush参数,另一种方法是调用sys.stdout.flush()函数。

除上述两种方式外,若输出内容中包含回车符\r,也会立即输出到屏幕,从而间接实现上述效果。但需注意,这会覆盖本行已输出的内容,使用时务必谨慎。

以上为个人经验总结,希望能对大家有所帮助,也希望大家多多支持本站。

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。