1.匿名函数
lambda x,y:x*y #同一行定义匿名函数
print(lambda x,y:x*y)
a=lambda x,y:x*y #定义匿名函数并赋值给a
print(a(2,3))
执行结果
<function <lambda> at 0x00000266C4C51820>
6
2.递归函数
自己调用自己实现递归算法,理论上作用可完全取代循环
def recursion_sum(num):
if num==1: #最小分解到1
return num
return recursion_sum(num-1)+num #自己调用自己
print(recursion_sum(10))
执行结果55
循环实现过程
def sum1(num):
i=1
add=0
while i<=num:
add=add+i
i+=1
return add
print(sum1(10))
3.递归运行原理
递归一次,在内存中开辟一个新的地址空间
记录递归过程状态,一直递归分解到最小范围
最后分解到最小范围,最后得出要么找到对应的值,要么返回找不到的结果
def recursion_sum(num):
if num== 1 : #最小分解到1
return num
tt=recursion_sum(num-1)+num
print('第%d次递归'%(num))
print('返回值%d在内存中地址:%d'%(tt,id(tt))) #追踪变量地质变化
return tt #返回递归结果
print(recursion_sum(5))
执行结果
第2次递归
返回值3在内存中地址:140732516194016
第3次递归
返回值6在内存中地址:140732516194112
第4次递归
返回值10在内存中地址:140732516194240
第5次递归
返回值15在内存中地址:140732516194400
15
递归算法其实是栈的调用过程,递归一次就进栈一次,返回一次,出栈一次
递归实现二分法查找
def find_num(nums,find,left,right):
middle=int((left+right)/2) #求商的整数,取中间值的下标
if nums[middle]==find: #找到列表中的值
return middle
if right==left+1: #若指定范围内只有一个未找元素
if nums[middle]!=find: #而且没有找到
return -1 #返回-1 -1代表没找到
if nums[middle]>find:
return find_num(nums,find,left,middle) #值的范围在[left,right)之间
elif nums[middle]<find:
return find_num(nums,find,middle+1,right) #值的范围在(middle,right]之间
nums=[1,2,3,4,5,6,8,16,30,42,55]
print(find_num(nums, 16, 0,len(nums)))
执行结果7