Python 零基础 Day07 笔记|Lambda 匿名函数、文件 IO 操作、异常捕获与 Debug 调试
一、文章前言
本篇整合 Python 第 7 天核心知识点,包含四大核心模块:lambda 匿名函数、文件读写操作、with 自动关闭文件、try-except 异常捕获、PyCharm 断点调试,附带大量可运行实战案例,适合零基础入门、面试复习、课堂笔记复盘,代码均可直接复制运行。
二、Lambda 匿名函数(重点)
2.1 适用场景
普通函数适合复用多次;lambda 匿名函数仅适用于函数只有一行代码、有返回值的场景,常作为参数传给排序、高阶函数使用,简化代码。
2.2 基础语法
# 语法
变量名 = lambda 参数列表: 返回表达式
# 调用
变量名()
2.3 基础案例
1)无参 lambda
# 普通函数
def fun1():
return 100
print(fun1())
# lambda简写
lambda_fun1 = lambda: 100
print(lambda_fun1())
2)带参数 lambda
# 普通函数求和
def fun2(a, b):
return a + b
print(fun2(3,5))
# lambda求和
lambda_fun2 = lambda a,b: a + b
print(lambda_fun2(4,6))
# 字符串转大写
lambda_fun3 = lambda s: s.upper()
print(lambda_fun3("hello python"))
3)带默认参数 lambda
lambda_fun4 = lambda a, b=100: a + b
print(lambda_fun4(4))
4)结合三目运算符判断
Python 三目语法:满足条件返回值 if 条件 else 不满足返回值
# 普通函数
def fn8(name):
return True if name == "张三" else False
print(fn8("张三"))
# lambda简写
fn9 = lambda name: True if name == "张三" else False
print(fn9("李四"))
2.4 实战:列表字典排序(高频考点)
使用sort(key=lambda)自定义排序规则
student_list = [
{"name": "张三", "age": 20, "address": '南京'},
{"name": "李四", "age": 25, "address": '北京'},
{"name": "王五", "age": 23, "address": '上海'},
{"name": "赵六", "age": 19, "address": '广州'},
{"name": "田七", "age": 22, "address": '深圳'}
]
# 根据age降序排序
student_list.sort(key=lambda x: x["age"], reverse=True)
print(student_list)
三、文件 IO 操作(文件读写)
3.1 文件基础概念
内存数据断电丢失,文件持久化存储在磁盘;文件分为文本文件、二进制文件(图片 / 视频 / 音频)。 文件操作三步:打开文件 → 读写操作 → 关闭文件
3.2 open () 基础语法
# 语法
文件对象 = open(文件路径, 打开模式, encoding="utf-8")
# 操作
文件对象.读写方法()
# 关闭
文件对象.close()
- encoding="utf-8":必须加,解决中文乱码
- 文件路径:相对路径、绝对路径
路径规则
| ./a.txt / a.txt | 当前代码同级文件 |
| ../a.txt | 上一级目录文件 |
| 文件夹/a.txt | 当前目录下级文件夹内文件 |
3.3 三大核心打开模式 r /w/a
| r | read 只读 | 文件不存在直接报错;光标在开头,仅可读 |
| w | write 只写 | 文件不存在自动创建;清空原有内容再写入 |
| a | append 追加 | 文件不存在自动创建;光标在末尾,原有内容保留 |
拓展带+/b:
- r+/w+/a+:可读可写,区别仅在文件光标位置
- rb/wb/ab:二进制模式,读写图片、视频等非文本文件
3.4 文件写入案例 w 模式
# 写入文本,utf-8防止中文乱码
f = open("./data/a.txt", "w", encoding="utf-8")
f.write("人生苦短,我要学Python")
f.close()
3.5 文件读取三大方法
1)read() / read(size)
一次性读取全部内容,size 指定读取字符长度,适合小文件
f = open("./data/a.txt", "r", encoding="utf-8")
# 读取全部
content = f.read()
print(content)
# 分段循环读取,避免大文件内存溢出
while True:
data = f.read(10)
if not data:
break
print(data, end="")
f.close()
2)readlines()
一次性读取所有行,返回列表,每行作为列表元素
f = open("./data/124.txt", "r", encoding="utf-8")
line_list = f.readlines()
for line in line_list:
print(line, end="")
f.close()
3)readline()
单次读取一行,循环读取适合超大文件
f = open("./data/124.txt", "r", encoding="utf-8")
while True:
line = f.readline()
if not line:
break
print(line, end="")
f.close()
四、with open 自动管理文件(推荐写法)
4.1 优势
无需手动调用close(),代码执行完毕自动关闭文件、释放资源,避免忘记关闭导致文件占用。
4.2 语法
with open(路径, 模式, encoding="utf-8") as 文件别名:
读写操作代码
4.3 实战案例
案例 1:文件内容按行反转写入新文件
# a.txt每行反转存入b.txt
with open("./data/1.txt", "r", encoding="utf-8") as read_f, open("./data/2.txt", "w", encoding="utf-8") as write_f:
while True:
line = read_f.readline()
if not line:
break
line = line.replace("\\n", "")
reverse_line = line[::-1]
write_f.write(reverse_line + "\\n")
案例 2:文件拷贝(文本文件)
# 复制a.txt 备份为 a[备份].txt
with open("./data/a.txt", "r", encoding="utf-8") as r_f, open("./data/a[备份].txt", "w", encoding="utf-8") as w_f:
content = r_f.read()
w_f.write(content)
案例 3:二进制文件拷贝(视频 / 图片)
# rb/wb 二进制模式,无需encoding
with open("test.avi", "rb") as src, open("副本.avi", "wb") as dest:
while True:
data = src.read(1024*1024) # 一次读取1MB
if not data:
break
dest.write(data)
五、异常处理 try-except-finally
5.1 什么是异常
代码运行出错时程序终止并抛出报错信息,即为异常;异常捕获可以保证程序不崩溃,提升健壮性。
5.2 完整异常语法结构
try:
# 可能报错的代码块
except 指定异常 as e:
# 捕获对应异常执行逻辑
except Exception as e:
# 兜底捕获所有异常,打印错误信息
else:
# 无异常时执行
finally:
# 无论是否报错,一定会执行(常用于关闭文件、释放资源)
5.3 基础捕获案例
# 捕获未定义变量异常
try:
print(name)
except Exception as e:
print("错误信息:", e)
5.4 else 无异常分支
try:
f = open("python.txt", "r", encoding="utf-8")
except Exception as e:
print("文件打开失败:", e)
else:
# 文件正常打开才执行
print(f.readlines())
f.close()
5.5 finally 必执行分支
try:
f = open("python.txt", "r", encoding="utf-8")
except:
f = open("python.txt", "w", encoding="utf-8")
else:
print(f.read())
finally:
# 无论是否报错,一定关闭文件
f.close()
5.6 实战:带异常处理的猜数字游戏
捕获用户非数字输入,防止程序崩溃
import random
num = random.randint(1, 100)
flag = False
for i in range(3):
try:
input_num = int(input("请输入1-100数字:"))
if not (1 <= input_num <= 100):
print("数字超出范围!")
continue
if input_num > num:
print("猜大了")
elif input_num < num:
print("猜小了")
else:
print("恭喜猜对!")
flag = True
break
except:
print("输入不是有效数字,请重新输入!")
if not flag:
print("3次机会用完,游戏结束")
六、PyCharm Debug 断点调试
调试是排查代码 bug 核心技能,操作步骤:
常用快捷键(Windows)
| F8 Step Over | 执行当前行,跳过函数内部 |
| F7 Step Into | 进入当前行调用的函数内部 |
| Shift+F8 Step Out | 跳出当前函数,回到调用位置 |
| F9 Resume Program | 运行到下一个断点 |
| Alt+F9 Run to Cursor | 直接运行到光标所在行 |
七、知识点总结
八、结尾
本文覆盖 Python 文件与异常全部实操内容,所有代码均可直接复制运行,适合零基础自学、期末复习、面试快速复盘。如果对你有帮助,欢迎点赞收藏~
网硕互联帮助中心



评论前必须登录!
注册