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() 函数原型(约 02:23)¶
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 机制。
示例与演示¶
- input 基础演示(cc1.py,约 01:13):
name = input()后print(name);演示无提示时程序"卡住"的现象,再加prompt("请输入你的名字: ")对比。老师新开了快捷键显示功能,屏幕左下角会显示他按下的键。 - sep 演示(约 03:18):
print(name, age)默认空格分隔;改成sep=","后输出变为逗号分隔。 - end 演示(约 03:28):两个
print默认分两行;把第一个print的end改为空字符串后,两次输出连在同一行。 - file 参数写日志演示(约 09:39):
f = open("log.txt", "w")打开文件(文件打开的细节留到后面讲),print(name, age, file=f)后终端没有任何输出,但目录下多出/更新了 log.txt,内容正是两个变量的值;最后要f.close()。 - 缓冲丢失示意(约 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 提供的日志模块。