在Python里,print是最常用的内置函数之一。不少人在拼接多列文本时用它来输出,却遇到了制表符显示对不齐的情况。这背后主要和print的默认分隔符机制有关。

print函数的默认分隔符是什么
print函数签名中包含一个名为sep的参数,它的默认值是一个空格字符串。也就是说,当你传入多个位置参数时,Python会自动用空格把它们连起来,而不是用空字符串或者制表符。
# 默认sep为空格
print("a", "b", "c")
# 输出: a b c
# 显式指定sep为制表符
print("a", "b", "c", sep="t")
# 输出: a b c(中间是制表符)
为什么会出现制表符显示差异
制表符本身不是一个固定宽度的字符,它的显示宽度取决于终端当前的列位置。通常终端以8个字符为一个制表位。如果你用默认空格分隔,每个字段之间只差一个空格;而用sep="t"时,光标会跳到下一个制表位,导致长短不一的内容对齐方式完全不同。
示例对比
# 使用空格分隔
print("name", "age", "city")
print("tom", "18", "bj")
# 使用制表符分隔
print("name", "age", "city", sep="t")
print("tom", "18", "bj", sep="t")
上面第一段用空格,列之间距离固定为一;第二段用制表符,由于name和tom长度不同,age前面的制表位跳跃位置不同,看起来就可能错位。
如何控制输出格式避免差异
如果希望稳定对齐,不要依赖终端对制表符的解析,可以使用以下方式:
- 用
sep=" "固定空格数代替制表符 - 使用字符串的format方法或f-string规定宽度
- 用csv模块或pandas输出结构化文本
# 使用f-string固定宽度
name, age, city = "tom", 18, "bj"
print(f"{name:<10}{age:<5}{city}")
# 输出: tom 18 bj
小结
print的默认分隔符是空格,不是制表符。制表符显示差异来自终端制表位机制和sep参数的不同设置。明确sep的行为并选择合适的格式化手段,就能消除这类输出混乱。