Python入门:输入输出(I/O)指南

文章目录

  • [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 关键注意事项

  1. 程序阻塞特性input() 会暂停程序执行,直到用户输入内容并按下「回车键」后,才会继续执行后续代码(需注意避免因等待输入导致程序卡顿)。
  2. 返回类型固定 :无论用户输入的是数字(如 18)、符号(如 +)还是文本(如 abc),input() 的返回值永远是 字符串(str) 。若需进行数值运算(如年龄比较、金额计算),必须手动通过 int()float() 等函数转换类型。
  3. 类型转换异常风险 :若转换不符合规则(如 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 常见用法实战

  1. 基础输出(单个/多个值)
python 复制代码
# 输出单个值(字符串、变量、表达式均可直接传入)
name = "Alice"
print("Hello Python")  # 输出:Hello Python(直接输出字符串常量)
print(name)            # 输出:Alice(输出变量值)
print(100 + 200)       # 输出:300(先计算表达式结果,再输出)

# 输出多个值(默认用空格分隔,无需手动拼接字符串)
age = 25
print("姓名:", name, "年龄:", age)  # 输出:姓名: Alice 年龄: 25
  1. 自定义分隔符(sep 参数):通过 sep 可修改多参数间的分隔符,满足格式化输出需求(如日期、列表类内容):
python 复制代码
# 用逗号分隔多个值(适合输出列表类数据)
print("apple", "banana", "orange", sep=", ")  # 输出:apple, banana, orange

# 用短横线拼接日期(符合日常日期显示习惯)
print(2024, 5, 20, sep="-")  # 输出:2024-05-20

# 无分隔符(实现字符串直接拼接)
print("Hello", "World", sep="")  # 输出:HelloWorld
  1. 自定义结束符(end 参数):默认情况下,每调用一次 print() 会自动换行,通过 end 可修改此行为(如多内容同行输出、空行分隔):
python 复制代码
# 不换行,用空格结尾(实现多语句输出在同一行)
print("Hello", end=" ")
print("World")  # 输出:Hello World(两行代码的结果合并为一行)

# 用感叹号结尾(不换行,后续输出接在感叹号后)
print("Python 很简单", end="!")  # 输出:Python 很简单!

# 用空行分隔多行内容(增强文本可读性)
print("第一行内容", end="\n\n")  # 输出第一行后,额外添加一个空行
print("第二行内容")  # 最终输出:第一行内容(空行)第二行内容
  1. 输出到文件(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 文件,包含上述两行文本
  1. 实时刷新(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-stringstr.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*****

还可以格式化数字。

  • 整数:可以指定宽度和填充字符。
python 复制代码
print("整数: {:5d}".format(42))  # 输出: '整数:    42',5个字符宽度,十进制整数
  • 浮点数:可以控制小数位数。
python 复制代码
print("浮点数: {:.2f}".format(3.14159))  # 输出: '浮点数: 3.14'
  • 百分比:将数值转换为百分比形式。
python 复制代码
print("百分比: {:.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+,简洁高效,首选)

在字符串前加 fF,直接在 {} 中嵌入变量、表达式甚至函数调用,语法最简洁、执行效率最高(新代码优先使用):

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

禁用转义的一些特殊应用场景:

  • 原始字符串 :在字符串前加 rR,可禁用转义,适合表示文件路径、正则表达式等(避免写大量双反斜杠):

    python 复制代码
    print(r"C:\Users\Documents\Python")  # 输出:C:\Users\Documents\Python(无需转义)
  • 三重引号字符串 :用 """''' 包裹的字符串,可直接换行,无需 \n,且保留缩进格式(适合多行文本,如文档注释、长文本):

    python 复制代码
    print("""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 程序的交互能力更加强大。


相关推荐
l1t2 小时前
修改OraDB-DUMP-Viewer-3.1.1的windows dll 版本test_export示例为Linux
linux·人工智能·windows·oracle
lifallen2 小时前
Flink Agent 与 Checkpoint:主循环闭环与 Mailbox 事件驱动模型
java·大数据·人工智能·python·语言模型·flink
平安的平安2 小时前
Python 构建AI多智能体系统:让三个 AI 协作完成复杂任务
开发语言·人工智能·python
曲幽2 小时前
FastAPI + Vue 前后端分离实战:我的项目结构“避坑指南”
python·vue·fastapi·web·vite·proxy·cors·env
Kapaseker2 小时前
Python 提速 — 惰性导入
python
杜子不疼.2 小时前
Python + Ollama 本地跑大模型:零成本打造私有 AI 助手
开发语言·c++·人工智能·python
李昊哲小课2 小时前
pip缓存配置
python·缓存·pip
belldeep2 小时前
python:介绍 UV 安装,如何使用 UV 安装配置 OpenHarness
windows·python·环境变量·uv
理想三旬2 小时前
Numpy 数据库
python·机器学习·numpy