跳转至

7.1 输入输出:input 与 print

内容梗概

本课讲解 Python 中最基本的两种输入输出方式:input() 函数获取用户输入,以及 print() 函数的完整参数用法。老师详细拆解了 print 的函数原型,包括多参数输出、分隔符 sep、结束符 end、输出目标 file 和强制刷缓冲 flush 这几个默认参数的含义,并结合文件输出演示了如何用 print 实现简单的日志功能。课程还顺带介绍了终端中标准输入、标准输出、标准错误的概念,以及操作系统写文件的缓冲机制。

知识点详解

input() 函数(约 00:46)

  • 原型:input([prompt]),方括号表示 prompt 是可选参数。
  • 程序运行到 input() 时会暂停,出现提示符和光标,等待用户输入;用户回车后,输入内容以**字符串**形式返回(约 01:02)。
  • 返回的字符串**不包含回车(换行符)**(约 01:28)。
  • prompt 的作用:提示用户该输入什么。如果不给提示,用户看到光标停住、程序不往下走,不知道发生了什么(约 01:39)。示例:name = input("请输入你的名字: ")。
  • 实际开发中程序大多直接读文件获取数据,input 只是最基础的交互方式;通过命令行参数给程序传信息(如 python xx.py 参数)会在讲标准库时展开(约 02:03)。

print 的函数原型很长,可接收多个用逗号分隔的参数,另有若干带默认值的参数:

  • sep(分隔符)(约 02:52):多个参数之间用什么字符分隔,默认是一个空格。例如指定 sep="," 后,print(name, age) 输出中 name 与 age 之间就是逗号。
  • end(结束符)(约 03:28):每次 print 输出完所有内容后自动追加的字符,默认是换行符 \n,所以两次 print 会分两行。改成空字符串 end="" 可强制不换行,后一次输出会接在前一次的末尾。
  • file(输出目标)(约 03:42):默认是 sys.stdout,即终端的标准输出,内容直接显示在屏幕上。如果先用 open 打开一个文件并把 file 参数指定为该文件对象,内容就会写进文件而不是显示在终端——可借此实现简单的日志功能(约 08:11,结合后面 09:39 的演示)。

标准输入 / 标准输出 / 标准错误(约 07:08)

  • 在终端中,键盘敲入的内容是**标准输入**,程序打印的内容是**标准输出**,命令出错时打印的报错是**标准错误**,共三个。
  • 详细内容会在后面讲"如何输入参数"时展开。

操作系统的写文件缓冲机制(约 11:30)

  • 程序(python.exe 执行某个 .py)向 log.txt 写内容时,操作系统**不会一个字一个字地写硬盘**,而是在内存中开辟一块缓存空间(老师举例说"比如 1KB,数字是瞎说的,有攒够一定量的意识即可"),攒满后一次性写入硬盘(约 12:12)。
  • 好处:内存写入速度远快于硬盘,避免频繁读写硬盘,提升运行效率(约 13:04)。
  • 风险:如果缓存还没写满、程序就崩溃退出,缓存中的内容会丢失,文件里实际没有写入——做日志时会导致无法判断某句话到底执没执行(约 14:02)。

flush 参数(约 15:22)

  • flush 默认是 False,即不会每次打印都把缓存内容真正写到文件上。
  • 设为 flush=True 后,每次 print 都直接把内容写入硬盘,牺牲效率换取日志的确定性(约 15:52)。
  • 老师特别强调(约 16:08):不要习惯用调试器调试程序,要习惯用日志;以后学到的各种 Python 日志模块,底层实现都涉及这里讲的缓冲与 flush 机制。

示例与演示

  1. input 基础演示(cc1.py,约 01:13):name = input() 后 print(name);演示无提示时程序"卡住"的现象,再加 prompt("请输入你的名字: ")对比。老师新开了快捷键显示功能,屏幕左下角会显示他按下的键。
  2. sep 演示(约 03:18):print(name, age) 默认空格分隔;改成 sep="," 后输出变为逗号分隔。
  3. end 演示(约 03:28):两个 print 默认分两行;把第一个 print 的 end 改为空字符串后,两次输出连在同一行。
  4. file 参数写日志演示(约 09:39):f = open("log.txt", "w") 打开文件(文件打开的细节留到后面讲),print(name, age, file=f) 后终端没有任何输出,但目录下多出/更新了 log.txt,内容正是两个变量的值;最后要 f.close()。
  5. 缓冲丢失示意(约 11:30 起):用画图方式讲解 python.exe → 内存缓存 → 硬盘文件三者关系,说明程序崩溃时缓存内容丢失的问题,引出 flush=True。

重点与难点

  • input 返回值永远是字符串,且不包含用户最后的回车换行。
  • print 的四个默认参数 sep / end / file / flush 各自的作用和默认值。
  • 理解缓冲机制:print 写文件时内容可能还在内存缓存里,程序崩溃会丢失;做日志时要用 flush=True。
  • 老师反复强调的工程习惯:用日志而不是调试器排查程序。

关联内容

  • 前置:之前课程已简单介绍过 input 和最基础的(类似 C 语言 % 的)格式化输出方法;相对路径、变量、字符串等基础概念。
  • 本课的 file= 写文件演示为 7.3 节"文件读写"做铺垫(open、close 只做了预告)。
  • 标准输入/输出/标准错误、命令行传参会在讲标准库的章节展开。
  • 格式化输出的进阶方法(f-string、format)是下一节 7.2 的内容。
  • 日志模块的底层原理与本课的缓冲/flush 机制直接相关,后续会学习 Python 提供的日志模块。