python之匿名函数,函数递归
1.匿名函数
匿名函数:不用绑定名字,内存地址用一次就回收
定义: res=(lambda x,y:x+y)(1,2)
f=lambda x,y:x+y
print(f)
print(f(1,2))
#max取最大值 min sorted 排序 map filter sorted 使用介绍
salaries={
'egon':3000,
'alex':100000000,
'wupeiqi':10000,
'yuanhao':2000
}
max 的原理 # 取最大值
1.首先将可迭代对象变成迭代器对象
2.res=next(可迭代器对象),将res当做参数创给 key指定的函数,然后将函数的返回值当做判断依据返回给max
例子:def func(k):
return salaries[k]
print(max(salaries,key=func)) # max相当于每一次next结果,当做参数传给key后面的函数把得到个返回值交
给max判断
匿名函数max简化版 print(max(salaerics,key=lambda k:salaries[k] )
sorted 排序,得到个新列表
# l=[10,1,3,-9,22]
# l1=sorted(l,reverse=False) 默认从小到大排序
l1=sorted(l,reverse=True) 取反 小大到小排序
print(sorted())
print(sorted(salaries,key=lambda k:salaries[k])) 根据key以列表的方式排序
map的原理
1.首先将可迭代对象变成迭代器对象
2.res=next(可迭代器对象),将res当做参数传给第一个参数指定的函数,然后将该函数的返回值当做map的结果之一
aaa=map(lambda x:x+‘sb’,names) # 取出names里面的值映射给前面的函数,aaa是个可迭代器对象 next 运行
print(list(aaa)) #转成列表可以直接全部取出
# print([name+"_SB" for name in names]) 更上述操作一样
filter的工作原理
1.首先将可迭代对象变成迭代器对象
2.res=next(可迭代器对象)将res当做单数传给第一个参数指定的函数,让后filter会判断函数的返回值的真假,如果真则留下来
2.函数的递归
函数递归调用(是一种特殊的嵌套调用) :在调用一个函数过程中,又直接或间接地调用了该函数本身
递归必须要遵循两个明确的阶段:
递推:一层一层递归调用下去,强调每进入下一层递归问题的规模都必须减少
回溯:递归必须有一个明确的结束条件,在满足该条件时解释递推 并且一层一层的回溯
递归的精髓在于通过不断地重复得到一个最终的结果
# import sys 调用模块
# print(sys.getrecursionlimit()) 修改递归传递
# sys.setrecursionlimit(3000) 修改递归最大次数
def age(n):
if n ==1: #条件:递归最终的次数
return 26 #递归最终结束的结果
return age(n-1)+2 # 每次调用age并减少一次数
print(age(5)) #回溯:根据每次的递归的结果和最终的结果回溯到你最终想要的值
l=[1[2[3[4[5[6[7[8]]]]]] 递归取值
def tell(1):
for item in l:
if type(item) is list:
#继续进入下一层递归
tell(item)
else:
print(item)
tell(1)
1.二分法例题
例题:查找列表指定值
nums=[1,3,4,5,6,7,8,9,10,11,22,33,,44]
search_num=8 #指定查找8这个数字
def search(search_num,nums):
if len(nums)==0:
print('not sxists')
return
mid_index=len(nums)//2
if search_num > nums[mid_index]:
nums=nums[mid_index+1:] #这里为啥加1能 因为上面那个判断条件已经判断该值了
search(search_num,nums) #这里nums通过切分后的新列表
elif:search_num < nums[mid_index]:
nums=nums[:mid_index]
search(search_num,nums)
else:
print('find it’)
search(31,nums)
4.内置函数使用方法:
掌握
# res='你好'.encode('utf-8')
# print(res)
#
# res=bytes('你好',encoding='utf-8')
# print(res)