python学习第五天回顾(匿名函数,递归调用)
| 一、匿名函数 |
当我们在传入函数时,有些时候,不需要显示地定义函数,直接传入匿名函数更方便,在python中,对匿名函数提供了有限支持,对此做一下示例:
1 # def func(x,y): 2 # return x+y 3 # 4 # func(1,2) 5 等同于===》 6 # f=lambda x,y:x+y 7 # print(f) #打印的是lambda 函数所在的内存地址 8 # 9 # print(f(1,2))
1 关键字lambda表示匿名函数,冒号前面的x,y表示函数参数,匿名函数有个限制,就是只能有一个表达式,不用写return,返回值就是该表达式结果。
######内置函数与lambda的应用#############
#map(),reduce(),filter()
##################################
1 #map(func,seq1[,seq2,.....]) 2 #第一个参数接受一个函数名,后面的参数接受一个或多个可迭代的序列,返回的是一个集合 3 #示例: 4 nums=(2,4,9,10) 5 6 res1=map(lambda x:x**2,nums) 7 8 print(list(res1)) 9 #拼接字符串的示例: 10 l=['a','w','y'] 11 12 13 res=map(lambda x:x+'_hello',l) 14 15 print(res) 16 17 print(list(res))
#####reduce函数的使用
1 from functools import reduce 2 3 l=[1,2,3,4,5] 4 print(reduce(lambda x,y:x+y,l,1)) 5 返回结果为: 6 16 7 8 from functools import reduce 9 10 l=[1,2,3,4,5] 11 print(reduce(lambda x,y:x+y,l,10)) 12 返回结果为: 13 25
######filter函数的使用
1 l=['ax_hello','wi_hi','y_hi','eg'] 2 3 res=filter(lambda x:x.endswith('hello'),l) 4 print(res) 5 print(list(res)) 6 返回结果分别为: 7 <filter object at 0x00000000028B4198> 8 ['ax_hello']
| 二、递归调用 |
在函数调用过程中,直接或间接地调用了函数本身,这就是函数的递归调用
1 #查看与设置递归调用的最大次数 2 import sys 3 print(sys.getrecursionlimit()) 4 print(sys.setrecursionlimit(1000000))
1 递归调用示例: 2 # def age(n): 3 # if n == 1: 4 # return 18 5 # return age(n-1)+2 6 # 7 # print(age(5)) 8 返回结果为: 9 26
1 递归调用在二分查找法中的应用: 2 a = [1, 2, 10,33,53,71,73,75,77,85,101,201,202,999,11111] 3 4 def search(find_num,seq): 5 if len(seq) == 0: 6 print('not exists') 7 return 8 mid_index=len(seq)//2 9 mid_num=seq[mid_index] 10 print(seq,mid_num) 11 if find_num > mid_num: 12 #in the right 13 seq=seq[mid_index+1:] 14 search(find_num,seq) 15 elif find_num < mid_num: 16 #in the left 17 seq=seq[:mid_index] 18 search(find_num,seq) 19 else: 20 print('find it') 21 22 search(77,a) 23 search(72,a) 24 search(-100000,a)

浙公网安备 33010602011771号