Python中无换行或空格打印的方法

Python中无换行或空格打印的方法

技术背景

在Python编程中,有时候我们需要在打印内容时不添加换行符或空格,例如在创建进度条、格式化输出等场景。不同版本的Python实现无换行或空格打印的方法有所不同。

实现步骤

Python 3.x

在Python 3中,print 是一个函数,它有 sepend 两个可选参数:

  • sep:用于指定多个参数之间的分隔符,默认是一个空格。
  • end:用于指定打印内容结尾的字符,默认是换行符 \n

不添加换行符

1
print('.', end='')

不添加参数间的空格

1
print('a', 'b', 'c', sep='')

处理缓冲问题

如果遇到缓冲问题,可以添加 flush=True 来立即刷新输出:

1
print('.', end='', flush=True)

Python 2.6 和 2.7

导入 Python 3 的 print 函数

可以从 __future__ 模块导入 Python 3 的 print 函数:

1
2
from __future__ import print_function
print('.', end='')

需要注意的是,从 __future__ 导入的 print 函数在 Python 2 中不支持 flush 关键字,若需要刷新输出,需手动调用 sys.stdout.flush()

使用 sys.stdout.write()

1
2
3
import sys
sys.stdout.write('.')
sys.stdout.flush() # 确保立即刷新输出

Python 2 及更早版本

在 Python 2 及更早版本中,在 print 语句的最后一个参数后面添加逗号即可不换行:

1
2
3
4
for i in range(10):
print i,
else:
print

核心代码

Python 3 无换行打印示例

1
2
3
for i in range(5):
print('a', end='')
# 输出: aaaaa

Python 2 使用 sys.stdout.write() 示例

1
2
3
4
import sys
for i in range(0, 10):
sys.stdout.write(".")
sys.stdout.flush()

最佳实践

创建自定义打印函数

可以使用 functools.partial 来创建一个新的打印函数:

1
2
3
import functools
printf = functools.partial(print, end='')
printf("Hello world\n")

模拟进度条

1
2
3
4
5
6
7
8
import sys
import time
sys.stdout.write("\rfoobar bar black sheep")
sys.stdout.flush()
time.sleep(2)
sys.stdout.write("\r" + 'hahahahaaa ')
sys.stdout.flush()
sys.stdout.write('\n')

常见问题

Python 2 中错误使用 print 函数

在 Python 2 中,print('.') 后面加逗号会产生误导,这不是将 print 作为函数使用,而是创建了一个元组:

1
print('.', 'x'),  # 避免这样使用

缓冲问题

在使用 print 函数时,如果设置了 end='',可能会遇到缓冲问题,导致输出不立即显示。可以使用 flush=True 或手动调用 sys.stdout.flush() 来解决。

Raspberry Pi IDLE 3 Python 壳不支持退格符

在 Raspberry Pi IDLE 3 Python 壳中,退格符 \b 不会按预期工作,而是打印一个空格。可以在其他环境中测试相关代码。


Python中无换行或空格打印的方法
https://119291.xyz/posts/2025-05-14.python-print-without-newline-or-space/
作者
ww
发布于
2025年5月14日
许可协议