9
0
0
05-lambda表达式、递归与异常处理
函数的lambda表达式+递归和异常处理
思维导图

lambda表达式
变量表达式(匿名函数)
fn = lambda x,y : x+y #默认带return效果
res = fn(1,2)
函数式声明(命名函数)
def fn(x,y):
return x+y
递归
定义:函数内部调用自身
#死递归:无限重复
def fn():
fn()
#递归
#要素1:将复杂的内容拆成多个相同的事
def fn():
if count<10:#出口-要素2:有一个终止递归的条件
fn()
return xxx #要素3:递归可以有返回值表示递归的结果,返回到上层
#1.1-10的累加和 -> 10 + 1~9的累加和 -> 9+1 ~ 8的累加和
def get_sum(n):
if n==1:
return 1
return n + get_sum(n-1)
sum = get_sum(10)
#2.1-10的乘积
def get_sum(n):
if n==1:
return 1
return n * get_sum(n-1)
sum = get_sum(10)
#3.斐波那契数列
def get_fbnq(n):
if n==1:
return 1
if n==2:
return 2
return get_fbnq(n-1) + get_fbnq(n-2)
#【拓展】求字典的键有多少个
d1 = {
1: 0,
2: 0,
3: 0,
4: {
5: 0,
6: {
7: 0
}
}
}
def get_key_num(d):
total = 0
total += len(d)
for i in d:
#i就是字典的键
#d[i]就是字典的值
if type(d[i]) is dict:
total += get_key_num(d[i])
return total
#【拓展】求一个部门有多少人
department = {
'黑马程序员': {
'西安校区': 3,
'北京校区': 11,
},
'博学谷': {
'狂野大模型': 3
},
'传智大学': 1
}
def get_person_num(d):
total = 0
for i in d:
#i就是字典的键
#d[i]就是字典的值
if type(d[i]) is int:
total += d[i]
else:
total += get_person_num(d[i])
return total
异常处理
如果代码会报错,你怎么样让你的代码可以继续运行下去
核心:防止代码报错影响后续代码的执行
try:
尝试执行的代码
except Exception as e:
报错了,e
else:
没有报错
finally:
不论有没有报错
文件读写
教你怎么读取文件的内容
教你怎么给文件里面写内容
打开文件
f1 = open(
file = 'xxx.xx',
mode = 'rwa',
encoding = 'utf-8'
)
打开的文件:绝对路径(通过盘符查找,不推荐) + 相对路径(../ 返回上一级,/目录 进入下一级)
打开的模式: r只读,光标在起始位置,不能创建文件 w写入,光标在起始位置,可以创建文件(会覆盖) a追加,光标是在结束位置
b 二进制模式(图片,视频...) +扩展模式 eg:r+读写 w+读写 wb+二进制读写
打开的编码:utf-8万国码 gbk中文编码
read() 读整个文件
read(10) 读文件10个字符
readline() 一行一行的读 -> 一行行的读文件 for i in f.lines() f.readline()
write() 写入内容
close() 关闭文件
with会在操作完成后自动关闭文件
with open(file = 'xxx.xx', mode = 'rwa', encoding = 'utf-8') as f:
f.write()
OS模块
内置的文件和文件夹操作包
创建文件夹: os.mkdir()
删除文件夹: os.rmdir()
删除文件: os.remove()
查看文件夹下的内容: os.listdir()
读取环境变量: os.getenv()
