递归函数和其他拓展课前练习请实现一个装饰器,把’函数的返回值’+100然后’返回’

def ount(fun):    def werrod(*ardes,**warrrts):        res=fun(*ardes,**warrrts)        return res+100    return werrod@ountdef 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@ountdef 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@ountdef funs():    passfuns()

递归函数

递归:直接或者间接的调用其他函数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#每个人的年龄相差为2res=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 = 200def my_half(l,target_num):    if len(l) == 0:        print('没找到')        return    # 3. 取的就是中间的那个索引    middle_index = len(l) // 2 # 向下取整 5 // 2 == 2  6 // 2 == 3    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 bres = 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)