文章目录
- [1. 输入:`input()` 函数](#1. 输入:
input()函数) -
- [1.1 基础用法示例](#1.1 基础用法示例)
- [1.2 关键注意事项](#1.2 关键注意事项)
- [1.3 Python 2 与 Python 3 的差异](#1.3 Python 2 与 Python 3 的差异)
- [2. 输出:`print()` 函数](#2. 输出:
print()函数) -
- [2.1 函数语法](#2.1 函数语法)
- [2.2 常见用法实战](#2.2 常见用法实战)
- [2.3 格式化输出](#2.3 格式化输出)
- [2.4 转义字符](#2.4 转义字符)
输入输出(I/O)是 Python 程序与外界交互的基础,基础数据类型则是构建代码逻辑的原子单元。本文聚焦控制台 I/O 核心函数与常用基础数据类型,用简洁讲解 + 实战示例,帮助快速掌握 Python 数据交互与处理。
Python 内置了灵活的输入输出机制,支持控制台交互、文件读写、网络传输等场景。
1. 输入:input() 函数
input() 是 Python 接收控制台用户输入的核心函数,其核心特性是读取用户输入的一行内容,并强制返回字符串类型。
1.1 基础用法示例
python
# 接收账号输入
username = input("请输入您的账号:")
print("账号:", username, "类型:", type(username))
# 接收年龄(注意:返回的是字符串)
age_input = input("请输入您的年龄:")
age = int(age_input) # 必须手动转类型才能计算
print("年龄大于16?", age > 16)
1.2 关键注意事项
- 程序阻塞特性 :
input()会暂停程序执行,直到用户输入内容并按下「回车键」后,才会继续执行后续代码(需注意避免因等待输入导致程序卡顿)。 - 返回类型固定 :无论用户输入的是数字(如
18)、符号(如+)还是文本(如abc),input()的返回值永远是 字符串(str) 。若需进行数值运算(如年龄比较、金额计算),必须手动通过int()、float()等函数转换类型。 - 类型转换异常风险 :若转换不符合规则(如
int("abc")、float("12a3")),Python 会抛出ValueError异常。
1.3 Python 2 与 Python 3 的差异
- Python 2 中,
raw_input()的功能与 Python 3 的input()完全一致,均返回字符串类型。 - Python 2 的
input()要求用户输入明确的数据类型表达式 (如输入18会直接存为int类型,输入[1,2,3]会直接存为list类型)。但该设计存在安全风险(如输入恶意代码),因此 Python 3 简化为统一的input()函数,仅返回字符串(更安全、更易理解)。
2. 输出:print() 函数
print() 是向控制台输出内容的基础工具,支持多值输出、自定义格式、写入文件等,是调试与展示结果的核心函数。
2.1 函数语法
print() 函数的完整语法如下,核心参数可灵活控制输出效果:
python
print(*args, sep=' ', end='\n', file=None, flush=False)
| 参数 | 功能说明 | 默认值 |
|---|---|---|
*args |
核心参数,要输出的内容(可多个) | 无 |
sep |
多参数之间的分隔符 | 空格(' ') |
end |
输出结束后附加的字符,用于控制换行行为 | 换行符('\n') |
file |
输出目标流,可指定为文件对象 | 控制台(sys.stdout) |
flush |
是否强制刷新输出流(立即显示内容),避免缓冲导致的延迟(如进度条场景) | False |
2.2 常见用法实战
- 基础输出(单个/多个值)
python
# 输出单个值(字符串、变量、表达式均可直接传入)
name = "Alice"
print("Hello Python") # 输出:Hello Python(直接输出字符串常量)
print(name) # 输出:Alice(输出变量值)
print(100 + 200) # 输出:300(先计算表达式结果,再输出)
# 输出多个值(默认用空格分隔,无需手动拼接字符串)
age = 25
print("姓名:", name, "年龄:", age) # 输出:姓名: Alice 年龄: 25
- 自定义分隔符(
sep参数):通过sep可修改多参数间的分隔符,满足格式化输出需求(如日期、列表类内容):
python
# 用逗号分隔多个值(适合输出列表类数据)
print("apple", "banana", "orange", sep=", ") # 输出:apple, banana, orange
# 用短横线拼接日期(符合日常日期显示习惯)
print(2024, 5, 20, sep="-") # 输出:2024-05-20
# 无分隔符(实现字符串直接拼接)
print("Hello", "World", sep="") # 输出:HelloWorld
- 自定义结束符(
end参数):默认情况下,每调用一次print()会自动换行,通过end可修改此行为(如多内容同行输出、空行分隔):
python
# 不换行,用空格结尾(实现多语句输出在同一行)
print("Hello", end=" ")
print("World") # 输出:Hello World(两行代码的结果合并为一行)
# 用感叹号结尾(不换行,后续输出接在感叹号后)
print("Python 很简单", end="!") # 输出:Python 很简单!
# 用空行分隔多行内容(增强文本可读性)
print("第一行内容", end="\n\n") # 输出第一行后,额外添加一个空行
print("第二行内容") # 最终输出:第一行内容(空行)第二行内容
- 输出到文件(
file参数):通过file指定文件对象,可直接将print()内容写入文件,代码更简洁(无需手动调用write()方法):
python
# 以「写入模式(w)」打开文件,指定编码为 utf-8(避免中文乱码)
with open("output.txt", "w", encoding="utf-8") as f:
print("这是写入文件的第一行内容", file=f)
print("这是写入文件的第二行内容", file=f)
# 执行后,当前目录会生成 output.txt 文件,包含上述两行文本
- 实时刷新(
flush参数):默认情况下,print()会缓冲内容(积累到一定量后再显示),在「进度条」「实时日志」等场景中,需用flush=True强制立即显示,避免内容延迟:
python
import time # 导入时间模块,用于模拟任务执行延迟
for i in range(5):
# \r 表示「回到当前行开头」,实现覆盖式输出(动态更新进度)
print(f"进度:{i+1}/5", end="\r")
time.sleep(1) # 暂停1秒(模拟任务执行过程)
flush=True # 强制刷新输出流,确保进度实时更新
# 最终效果:终端动态显示「进度:1/5」→「进度:2/5」→ ... →「进度:5/5」
2.3 格式化输出
直接用 print() 拼接内容灵活性差(如数字保留小数、文本对齐),Python 提供三种主流格式化方式,覆盖从简单到复杂的输出需求,其中 f-string 是 Python 3.6+ 的首选方案。
- 方式一:
%操作符(旧式格式化,了解即可)
通过 % 占位符指定数据类型,后续用元组或字典传入值,主要用于维护旧代码(新代码不推荐):
python
# 1. 按位置传值(%s:字符串,%d:整数,%f:浮点数)
res1 = "我的名字是 %s,年龄是 %d 岁" % ("Tom", 18)
print(res1) # 输出:我的名字是 Tom,年龄是 18 岁
# 2. 按字典传值(打破位置限制,代码更易读)
res2 = "我的名字是 %(name)s,年龄是 %(age)d 岁" % {"name": "Tom", "age": 18}
print(res2) # 输出:我的名字是 Tom,年龄是 18 岁
# 3. 浮点数格式化(保留2位小数,避免冗余)
res3 = "圆周率约为 %.2f" % 3.14159
print(res3) # 输出:圆周率约为 3.14
这里
%s表示字符串,%d表示整数,还有其他类型如%f(浮点数)、%x(十六进制)等。因为 % 操作符已经逐渐被f-string和str.format()取代,但在某些旧代码库中仍然可以看到它的身影,所以了解即可(依然可以使用)。
- 方式二:
str.format()方法(兼容性好,推荐)
通过 {} 占位符,支持按位置、按关键字传值,还能灵活控制数字格式(如对齐、千位分隔符),兼容 Python 2.6+(适合需兼容旧版本的场景):
python
# 1. 按位置传值(可重复使用索引,减少参数冗余)
res1 = "我的名字是 {0},年龄是 {1} 岁;再次强调:名字是 {0}".format("Tom", 18)
print(res1) # 输出:我的名字是 Tom,年龄是 18 岁;再次强调:名字是 Tom
# 2. 按关键字传值(参数与占位符直接对应,可读性更高)
res2 = "我的名字是 {name},年龄是 {age} 岁".format(name="Tom", age=18)
print(res2) # 输出:我的名字是 Tom,年龄是 18 岁
# 3. 高频数字格式化场景
print("整数(占5位宽度,右对齐):{:5d}".format(42)) # 输出:整数(占5位宽度,右对齐): 42
print("浮点数(保留2位小数):{:.2f}".format(3.14159)) # 输出:浮点数(保留2位小数):3.14
print("百分比(保留1位小数):{:.1%}".format(0.87)) # 输出:百分比(保留1位小数):87.0%
print("大数字(千位分隔符):{:,}".format(1234567890)) # 输出:大数字(千位分隔符):1,234,567,890
print("文本居中(占10位,*填充):{:*^10}".format("mid")) # 输出:文本居中(占10位,*填充):**mid*****
还可以格式化数字。
- 整数:可以指定宽度和填充字符。
pythonprint("整数: {:5d}".format(42)) # 输出: '整数: 42',5个字符宽度,十进制整数
- 浮点数:可以控制小数位数。
pythonprint("浮点数: {:.2f}".format(3.14159)) # 输出: '浮点数: 3.14'
- 百分比:将数值转换为百分比形式。
pythonprint("百分比: {:.1%}".format(0.87)) # 输出: '百分比: 87.0%'
- 其他的使用方法
python# 可以使用 <、^、> 分别表示左对齐、居中对齐、右对齐,并结合指定宽度来实现对齐效果。 # 同时也可以指定填充字符,默认为空格。 # 左对齐 print("{:<10}".format("left")) # 输出: 'left ' # 居中对齐 print("{:^10}".format("center")) # 输出: ' center ' # 右对齐 print("{:>10}".format("right")) # 输出: ' right' # 自定义填充字符 print("{:*^10}".format("mid")) # 输出: '**mid*****' # 对于较大的数字,可以使用逗号作为千位分隔符以提高可读性。 print("{:,}".format(1234567890)) # 输出: '1,234,567,890' # 当处理非常大或非常小的数值时,可以使用科学计数法表示。 print("{:.2e}".format(123456789)) # 输出: '1.23e+08' # 指定整数显示进制 print("整数: {:d}".format(42)) # 输出: '整数: 42'(十进制) print("整数: {:b}".format(42)) # 输出: '整数: 101010'(二进制) print("整数: {:o}".format(42)) # 输出: '整数: 52'(八进制) print("整数: {:x}".format(42)) # 输出: '整数: 2a'(十六进制)
- 方式三:
f-string(Python 3.6+,简洁高效,首选)
在字符串前加 f 或 F,直接在 {} 中嵌入变量、表达式甚至函数调用,语法最简洁、执行效率最高(新代码优先使用):
python
name = "Tom"
age = 18
# 1. 嵌入变量(直观简洁,无需拼接)
res1 = f"我的名字是 {name},年龄是 {age} 岁"
print(res1) # 输出:我的名字是 Tom,年龄是 18 岁
# 2. 嵌入表达式(直接计算,减少中间变量)
res2 = f"明年我就 {age + 1} 岁了,年龄的2倍是 {age * 2}"
print(res2) # 输出:明年我就 19 岁了,年龄的2倍是 36
# 3. 嵌入函数调用(灵活处理数据)
def get_full_name(first_name, last_name):
return f"{first_name} {last_name}"
res3 = f"我的全名是 {get_full_name('Tom', 'Smith')}"
print(res3) # 输出:我的全名是 Tom Smith
# 4. 数字格式化(与 format() 语法兼容,更简洁)
print(f"圆周率(保留3位小数):{3.14159:.3f}") # 输出:圆周率(保留3位小数):3.142
print(f"二进制表示:{42:b}") # 输出:二进制表示:101010
2.4 转义字符
转义字符以 \ 开头,用于表示无法直接输入的字符(如换行、制表符)或避免语法冲突(如引号嵌套),是字符串处理的基础工具。
- 常见转义字符表
| 转义字符 | 含义说明 | 示例代码 | 输出结果 |
|---|---|---|---|
\n |
换行符(开启新行) | print("第一行\n第二行") |
第一行 第二行 |
\t |
水平制表符(类似 Tab 键) | print("姓名\t年龄\t性别") |
姓名 年龄 性别 |
\' |
单引号(避免语法冲突) | print('He said \'Hello!\'') |
He said 'Hello!' |
\" |
双引号(避免语法冲突) | print("She said \"Hi!\"") |
She said "Hi!" |
\\ |
反斜杠本身(表示路径等) | print("文件路径:C:\\Users") |
文件路径:C:\Users |
\r |
回车符(覆盖当前行内容) | print("Loading...\rDone!") |
Done!.. |
\b |
退格符(删除前一个字符) | print("abc\bd") |
abd |
禁用转义的一些特殊应用场景:
-
原始字符串 :在字符串前加
r或R,可禁用转义,适合表示文件路径、正则表达式等(避免写大量双反斜杠):pythonprint(r"C:\Users\Documents\Python") # 输出:C:\Users\Documents\Python(无需转义) -
三重引号字符串 :用
"""或'''包裹的字符串,可直接换行,无需\n,且保留缩进格式(适合多行文本,如文档注释、长文本):pythonprint("""Python 基础知识点: 1. 输入输出:input() / print() 2. 数据类型:int / float / str 3. 格式化输出:f-string 优先""") # 输出: # Python 基础知识点: # 1. 输入输出:input() / print() # 2. 数据类型:int / float / str # 3. 格式化输出:f-string 优先
转义字符的核心作用是解决「无法直接输入」或「语法冲突」的问题,让字符串表达更灵活,是处理文本数据的必备内容。
掌握这些内容后,就可以轻松应对日常开发中的控制台交互需求。后续可进一步学习文件 I/O、网络 I/O 等进阶内容,让 Python 程序的交互能力更加强大。