1.装饰器的补充: from functools import wraps ef deco(func): @wraps(func) >>>>可以完全将装饰器包装成与被修饰器一样的注释 def wrapper(*args, **kwargs): res = func(*args, **kwargs) return res # wrapper.__name__=func.__name__ # wrapper.__doc__=func.__doc__ return wrapper 2.函数的递归:函数嵌套调用的一种特殊形式,在调用一个函数的过程中又直接或则间接的调用该函数 递归调用的两个阶段: 1.回溯:一次次递归调用下去,谁白了就一个重复的过程,但需要注意的是每一次的重复问题的规模都应该减少,直到逼近一个最终的结果,即回溯阶段一定要有一个明确的结束条件 2.递推:往回一层一层推算出结果. 算法:是如何高效的解决某一个问题的方法和套路 相关的练习: 1. l=[1,[2,[3,[4,[5,[6,[7,[8,[9,[10,[11,]]]]]]]]]]] def foo(l): for i in l: if type(i)==int: print(i) else: foo(i) foo(l) 2.利用二分法查找列表里面的元素 nums=[13,15,17,23,31,53,74,81,93,102,103,201,303,403,503,777] def foo(number, nums): len_list = len(nums) // 2 print(nums) if len(nums) == 0: print("do not find ") return 1 if number < nums[len_list]: nums = nums[0:len_list] return foo(number, nums) elif number > nums[len_list]: nums = nums[len_list + 1:] return foo(number, nums) else: print("find it ") foo(101,nums) 三.三元表达式: 实现的效果是:条件成立的情况下的返回一个值,不成立的情况下返回另一个只值 res=条件成立情况下的返回值 if 条件 else 条件不成立的情况下返回值 name = input(">>>>>").strip() res ="sb" if name=="jjj" else "Nb" print(res) 四.列表生成式 字典生成式 1. 列表生成式:res=[里面的元素在进行才操作 for循环一个列表] 2.字典生成式:利用enumerate内置的函数 ###################################### name=["jxl",'egon','yyh'] age=['12','14','23'] dis={k:age[i] for i,k in enumerate(name)} print(dis) ######################################## name=["jxl",'egon','yyh'] age=['12','14','23'] dis={} for i,k in enumerate(name): dis[k]=age[i] print(dis) 五. 匿名函数:就是没有名字的函数(仅仅临时使用一次,没有重复的使用的需求) 精髓:就是没有名字,为其绑定名字没有意义,一般与内置函数结合使用 关键字:lambad print((lambda x,y:x+y)(11,22)) 六.内置函数: max min sorted map filter reduce max:可以通过max函数的key参数来改变max函数的比较依据. 运行原理:max函数会"for 循环"出一个值, 然后将该值传给key指定的函数,调用key指定的函数,将拿到的给返回值当做比较数据 salaries={ 'egon':300000, 'alex':100000000, 'wupeiqi':10000, 'yuanhao':2000 } print(max(salaries,key=lambda name:salaries[name])) min(最小值):与max原理相似 sorted;排序 nums=[11,33,22,9,31] res=sorted(nums,reverse=True) >>将得到另一个列表,原来的列表并没有改变 # res=sorted(salaries,key=lambda name:salaries[name],reverse=True) # print(res) map:把一个列表按照我们自定义的映射规则映射成一个新的列表 names=['alex','lxx','wxx','yxx'] res=map(lambda name: name + "dSB", names) print(list(res)) names=['alex','lxx','wxx','yxx'] res=[i+"dsb" for i in names] print(res) filter: 从一个列表中过滤出符合我们过滤规则的值 运行原理:相当于for循环取出每一个人名,然后传给匿名函数, 将调用匿名函数返回值为True的那个人名给留下来 names=['alex_sb','lxx_sb','wxx_sb','egon','yxx'] res=filter(lambda name:name.endswith('sb'),names) print(list(res)) print([name for name in names if name.endswith('sb')]) reduce: 把多个值合并成一个结果: from functools import reduse from functools import reduce l=['a','b','c','d'] # res=reduce(lambda x,y:x+y,l,'A') #'A','a' => 'Aa' #'Aa','b'=>'Aab' #'Aab','c'=>'Aabc' #'Aabc','d'=>'Aabcd' # print(res)