输入与输出
本教程共 70 篇 · 第 43 篇 · 更新于 2026-07-22 · 约 4 分钟阅读
43. 输入与输出
本节目标:熟练掌握
input的用法,精通 f-string 的高级格式化技巧,了解其他格式化方式的适用场景。
程序跟外界打交道,最基本的方式就是输入(input)和输出(output)。用户敲键盘是输入,屏幕显示结果是输出。文件读写、网络通信,本质也是不同形式的 I/O。
这一章聚焦控制台层面的输入输出,为后续文件操作打基础。
print:不只是打印
print 你已经很熟悉了,但它有几个参数很实用:
# 不换行
print("加载中", end="")
print("...", end="")
print("完成")
# 多值用自定义分隔符
print("2024", "07", "21", sep="-")
# 2024-07-21
# 同时修改结束符和分隔符
print("a", "b", "c", sep=" | ", end="!\n")
# a | b | c!
end 默认是 \n(换行),sep 默认是空格。改这两个参数能做出很多灵活的输出效果。
Tip如果
input:获取用户输入
name = input("请输入你的名字:")
print(f"你好,{name}!")
input 返回的永远是字符串。需要数字时要手动转换:
age = int(input("请输入年龄:"))
price = float(input("请输入价格:"))
转换前最好验证一下,否则用户输入字母会抛 ValueError:
raw = input("请输入年龄:")
if raw.isdigit():
age = int(raw)
else:
print("请输入有效数字")
Warning
input在获取密码等敏感信息时,会把输入内容显示在屏幕上。如果需要隐藏输入,用getpass模块:import getpass pwd = getpass.getpass("请输入密码:")
字符串格式化:三种方式
Python 历史上出现过三种字符串格式化方式,现在你应该优先掌握 f-string。
1. % 格式化(旧式,了解即可)
name = "Alice"
age = 25
print("我叫 %s,今年 %d 岁" % (name, age))
这种写法来自 C 语言,功能有限,可读性也一般。看到旧代码能认识就行,新项目别用它。
2. str.format()(过渡方案)
print("我叫 {},今年 {} 岁".format(name, age))
print("我叫 {0},今年 {1} 岁".format(name, age))
print("我叫 {n},今年 {a} 岁".format(n=name, a=age))
format 比 % 灵活,支持命名参数、重复引用。但在 f-string 出现后,它的使用场景变少了。
3. f-string(推荐,Python 3.6+)
print(f"我叫 {name},今年 {age} 岁")
变量直接嵌入字符串,直观高效。而且支持表达式:
x = 10
y = 3
print(f"{x} 除以 {y} 等于 {x / y:.2f}")
# 10 除以 3 等于 3.33
f-string 进阶技巧
控制精度与宽度
pi = 3.1415926
print(f"{pi:.2f}") # 3.14(保留两位小数)
print(f"{pi:10.2f}") # ' 3.14'(总宽度 10,右对齐)
print(f"{pi:<10.2f}") # '3.14 '(左对齐)
print(f"{pi:^10.2f}") # ' 3.14 '(居中)
print(f"{pi:010.2f}") # 0000003.14(前导零)
格式说明符的结构是 :[[填充]对齐][符号][宽度][.精度][类型]。日常用得最多的是 .2f(两位小数)和 >10(右对齐占 10 位)。
千位分隔符
num = 12345678
print(f"{num:,}") # 12,345,678
print(f"{num:_}") # 12_345_678
二进制、八进制、十六进制
n = 255
print(f"{n:b}") # 11111111(二进制)
print(f"{n:o}") # 377(八进制)
print(f"{n:x}") # ff(十六进制小写)
print(f"{n:X}") # FF(十六进制大写)
日期时间格式化
from datetime import datetime
now = datetime.now()
print(f"今天是 {now:%Y-%m-%d %H:%M}")
# 今天是 2024-07-21 14:30
Notef-string 里放
=能同时显示表达式和结果(Python 3.8+):x = 10 print(f"{x * 2=}") # x * 2=20调试时非常方便,不用写两遍变量名。
自定义对象的格式化
如果你的类实现了 __format__ 方法,f-string 会自动调用:
class Point:
def __init__(self, x, y):
self.x = x
self.y = y
def __format__(self, spec):
if spec == 'polar':
import math
r = math.hypot(self.x, self.y)
theta = math.degrees(math.atan2(self.y, self.x))
return f"(r={r:.2f}, θ={theta:.1f}°)"
return f"({self.x}, {self.y})"
p = Point(3, 4)
print(f"{p}") # (3, 4)
print(f"{p:polar}") # (r=5.00, θ=53.1°)
输出重定向
print 默认输出到标准输出(stdout)。你可以重定向到文件:
with open('output.txt', 'w', encoding='utf-8') as f:
print("写入文件的内容", file=f)
file 参数接受任何文件对象(或类似文件的对象)。结合 StringIO,还能把输出暂存在内存里。
小结
print的sep和end参数控制分隔符和结尾。input返回字符串,数字需要手动转换。- f-string 是首选格式化方式,支持表达式、精度控制、对齐、进制转换。
- 输出可以重定向到文件或其他类文件对象。
输入输出是程序的「五官」。格式化字符串的能力越强,你输出信息的效率就越高。f-string 是 Python 3 最值得掌握的特性之一,花点时间练熟它,回报很大。
来源:参考了 runoob「Python3 输入和输出」、liaoxuefeng「输入和输出」、pythondoc「7. 输入与输出」等,改写后所得。