匿名函数lambda
匿名函数:lambda x,y:x+y
上述解释:x,y分别是函数的参数,x+y是函数的返回值
匿名函数的命名规则,用lamdba 关键字标识,冒号(:)左侧表示函数接收的参数(a,b) ,冒号(:)右侧表示函数的返回值(a+b)。
因为lamdba在创建时不需要命名,所以叫匿名函数
等同于普通函数:
12 | def test(x,y): return x + y |
匿名函数只是没有函数名,主要是配合内置函数使用
示例1:
12345678910 | # filter##过滤(将布尔值为True的结果过滤出来) name_l = [{ "name" : "tom" , "age" : 222 }, { "name" : "alex" , "age" : 333 }, { "name" : "jack" , "age" : 133 }, { "name" : "sun" , "age" : 363 }, ] # 使用匿名函数 res = filter ( lambda d:d[ "age" ]> 200 ,name_l) for i in res: print (i) |
执行结果是:
123 | { 'name' : 'tom' , 'age' : 222 } { 'name' : 'alex' , 'age' : 333 } { 'name' : 'sun' , 'age' : 363 } |
示例2:
#map# 合并映射
123 | l = [ 1 , 2 , 3 , 4 , 5 ] res = map ( lambda x:x * * 2 ,l) #求平列表里的平方值,并以列表的方式呈现 print ( list (res)) |
执行结果是:
1 | [ 1 , 4 , 9 , 16 , 25 ] |
递归函数:
定义:在函数内部,可以调用其他函数。如果一个函数在内部调用自身本身,这个函数就是递归函数。
递归函数的优点: 简单,逻辑清晰。理论上,所有的递归函数都可以写成循环的方式,但循环的逻辑不如递归清晰。
递归特性:
1. 必须有一个明确的结束条件
2. 每次进入更深一层递归时,问题规模相比上次递归都应有所减少
3. 递归效率不高,递归层次过多会导致栈溢出(在计算机中,函数调用是通过栈(stack)这种数据结构实现的,每当进入一个函数调用,栈就会加一层栈帧,每当函数返回,栈就会减一层栈帧。由于栈的大小不是无限的,所以,递归调用的次数过多,会导致栈溢出。)
示例:
123456 | def price(n): if n = = 1 : return 100 else : return price(n - 1 ) + 100 #在函数内部调用自身 print (price( 5 )) |
执行结果是:
1 | 500 |