输入输出(I/O)是 Python 程序与外界交互的基础,基础数据类型则是构建代码逻辑的原子单元。本文聚焦控制台 I/O 核心函数与常用基础数据类型,用简洁讲解 + 实战示例,帮助快速掌握 Python 数据交互与处理。


Python 内置了灵活的输入输出机制,支持控制台交互、文件读写、网络传输等场景。

1. 输入:input() 函数

input() 是 Python 接收控制台用户输入的核心函数,其核心特性是读取用户输入的一行内容,并强制返回字符串类型。

1.1 基础用法示例

# 接收账号输入
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() 函数的完整语法如下,核心参数可灵活控制输出效果:

print(*args, sep=' ', end='\n', file=None, flush=False)
参数功能说明默认值
*args核心参数,要输出的内容(可多个)无
sep多参数之间的分隔符空格(' ')
end输出结束后附加的字符,用于控制换行行为换行符('\n')
file输出目标流,可指定为文件对象控制台(sys.stdout)
flush是否强制刷新输出流(立即显示内容),避免缓冲导致的延迟(如进度条场景)False

2.2 常见用法实战

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

# 输出多个值(默认用空格分隔,无需手动拼接字符串)
age = 25
print("姓名:", name, "年龄:", age)  # 输出:姓名: Alice 年龄: 25
  1. 自定义分隔符(sep 参数):通过 sep 可修改多参数间的分隔符,满足格式化输出需求(如日期、列表类内容):
# 用逗号分隔多个值(适合输出列表类数据)
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 可修改此行为(如多内容同行输出、空行分隔):
# 不换行,用空格结尾(实现多语句输出在同一行)
print("Hello", end=" ")
print("World")  # 输出:Hello World(两行代码的结果合并为一行)

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

# 用空行分隔多行内容(增强文本可读性)
print("第一行内容", end="\n\n")  # 输出第一行后,额外添加一个空行
print("第二行内容")  # 最终输出:第一行内容(空行)第二行内容
  1. 输出到文件(file 参数):通过 file 指定文件对象,可直接将 print() 内容写入文件,代码更简洁(无需手动调用 write() 方法):
# 以「写入模式(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 强制立即显示,避免内容延迟:
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+ 的首选方案。

  • 方式一:% 操作符(旧式格式化,了解即可)

通过 % 占位符指定数据类型,后续用元组或字典传入值,主要用于维护旧代码(新代码不推荐):

# 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+(适合需兼容旧版本的场景):

# 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*****

还可以格式化数字。

  • 整数:可以指定宽度和填充字符。
print("整数: {:5d}".format(42))  # 输出: '整数:    42',5个字符宽度,十进制整数
  • 浮点数:可以控制小数位数。
print("浮点数: {:.2f}".format(3.14159))  # 输出: '浮点数: 3.14'
  • 百分比:将数值转换为百分比形式。
print("百分比: {:.1%}".format(0.87))  # 输出: '百分比: 87.0%'
  • 其他的使用方法
# 可以使用 <、^、> 分别表示左对齐、居中对齐、右对齐,并结合指定宽度来实现对齐效果。
# 同时也可以指定填充字符,默认为空格。

# 左对齐
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,直接在 {} 中嵌入变量、表达式甚至函数调用,语法最简洁、执行效率最高(新代码优先使用):

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,可禁用转义,适合表示文件路径、正则表达式等(避免写大量双反斜杠):
    print(r"C:\Users\Documents\Python")  # 输出:C:\Users\Documents\Python(无需转义)
    
  • 三重引号字符串:用 """ 或 ''' 包裹的字符串,可直接换行,无需 \n,且保留缩进格式(适合多行文本,如文档注释、长文本):
    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 程序的交互能力更加强大。


Logo

这里是“一人公司”的成长家园。我们提供从产品曝光、技术变现到法律财税的全栈内容,并连接云服务、办公空间等稀缺资源,助你专注创造,无忧运营。

更多推荐