递归函数和其他拓展
课前练习
请实现一个装饰器,把'函数的返回值'+100然后'返回'
def ount(fun):
def werrod(*ardes,**warrrts):
res=fun(*ardes,**warrrts)
return res+100
return werrod
@ount
def funs(intes):
return int(intes)
res=funs(100)
print(res)
请实现一个装饰器,通过一次调用使函数重复执行5次
def ount(fun):
def werrod(*ardes,**warrrts):
count=0
while count<5:
print('输出')
fun(*ardes,**warrrts)
count+=1
return werrod
@ount
def funs():
print('循环')
funs()
请实现一个装饰器每次调用函数时,将函数名字写入文件中
def ount(fun):
def werrod(*ardes,**warrrts):
with open('qw','a',encoding='utf-8')as f:
f.write(f'name={fun.__name__}\n')
fun(*ardes,**warrrts)
return werrod
@ount
def funs():
pass
funs()
递归函数
递归:直接或者间接的调用其他函数
def index():
print('from index')
func()
def func():
print('from func')
index()
func()
递归在实际编码中是不允许出现的,一旦出现了无限递归就会直接报错
1. 递推
一层一层的往下寻找答案
2. 回溯
通过最后一个结果往回寻找最开始的那个答案
递归是必须有结束条件!!!!
递归的使用场景
阶乘运算
def dig(fun):
def inter(ase):
if ase==0:
return 1
else:
return inter(ase - 1) * ase
return inter(fun)
print(dig(5))
求第5个人的年龄
def inter(ase):
if ase == 1:
return 18
return inter(ase - 1) +2
res=inter(5)
print(res)
算法二分法
二分法的原理
二分法的原理:
1. 列表必须先排序(从小到大,从大到小)
2. 折半查找
思路
一般思路
将列表的元素一个一个的经行比较
然后得出结果
l = [11, 2, 3, 43, 55, 67, 23, 45, 45, 88, 99, 66,]
for i in l:
if i == 66:
print('找到了')
二分法
l=[12,23,124,123,41,24,134,12]
l.sort()
target_num = 200
def my_half(l,target_num):
if len(l) == 0:
print('没找到')
return
middle_index = len(l) // 2
if target_num > l[middle_index]:
l_right = l[middle_index+1:]
print(l_right)
my_half(l_right, target_num)
elif target_num < l[middle_index]:
l_left = l[:middle_index]
print(l_left)
my_half(l_left, target_num)
else:
print('找到了')
my_half(l, target_num)
三元表达式
对于只有二选一的情况,我们推荐使用三元表达式
语法结构:
res = 条件成立之后的结果 if 条件 else 条件不成立之后的结果
def my_max(a, b):
return a if a > b else b
res = my_max(1, 2)
"""还支持嵌套"""
res = 2 if 2 > 10 else ( 10 if False else (100 if 10 > 5 else (2 if False else 1)))
print(res)
列表生成式
names_list = ['kevin', 'jerry', 'tank', 'oscar']
res = [ name + '_SB' for name in names_list]
print(res)
res = [name+'_SB' if name != 'jerry' else name for name in names_list]
print(res)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)