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)

 

posted @ 2017-06-02 23:13  冠彭  阅读(83)  评论(0)    收藏  举报