匿名函数的使用
#匿名函数-- 没有名字的函数,简化函数定义
#格式:lambda表达式 参数1 , 参数2. . . : 运算
s = lambda a, b: a+ b
print ( s) #< function < lambda> at 0x000001F30E522E18 >
result = s ( 3 , 4 )
print ( result) #7
s1= lambda x, y: x* y
print ( s1 ( 2 , 5 ) ) #10
#匿名函数作为参数(函数作为参数)
#x, y是变量,func是函数
def func ( x, y, func1) :
print ( x, y)
print ( func1)
print ( func1 ( x, y) )
#调用func
func ( 1 , 2 , lambda a, b: a+ b)
'' '
1 2
< function < lambda> at 0x000001A5E104A0D0 >
3
'' '
匿名函数与内置函数的应用–max
#匿名函数与内置函数结合使用
#常见内置函数 max sorted zip. . .
#匿名函数用lambda来表示 且通常将他作为函数的参数来使用
list1= [ 3 , 5 , 8 , 9 , 0 ]
m= max ( list1)
print ( '列表最大值:' , m)
list2= [ { 'a' : 10 , 'b' : 20 } , { 'a' : 13 , 'b' : 11 } , { 'a' : 8 , 'b' : 11 } ]
#返回a最大值的那个字典
m= max ( list2, key= lambda x: x[ 'a' ] )
print ( 'a是最大值的字典为:' , m)
#比较的类型不能直接用大于小于号比较,此时用key改变比较依据
#迭代过程中取出一个字典,赋值给x,我取出字典里的键为a的值作为比较的依据
'' '
lambda x: x[ 'a' ]
== >
def func ( d) :
return d[ 'a' ]
'' '
匿名函数与内置函数的应用–map
#内置函数map
#map ( ) 对可迭代序列进行统一操作
list1= [ 4 , 6 , 82 , 3 , 6 , 9 ]
result = map ( lambda x: x+ 2 , list1)
print ( result)
print ( list ( result) )
'' '
< map object at 0x000001C8333D39B0 >
[ 6 , 8 , 84 , 5 , 8 , 11 ]
'' '
#不使用map实现上诉功能
for index, i in enumerate ( list1) :
list1[ index] = i+ 2
#传过来的是偶数就返回本身,不是就返回本身+ 1
func= lambda x: x if x% 2 == 0 else x+ 1
print ( func ( 5 ) ) #6
#对列表的奇数+ 1 ,偶数不变
list1= [ 4 , 6 , 82 , 3 , 6 , 9 ]
result= map ( lambda x : x if x% 2 == 0 else x+ 1 , list1)
print ( list ( result) ) #[ 4 , 6 , 82 , 4 , 6 , 10 ]
匿名函数与内置函数的应用–reduce
#内置函数reduce ( )
#对列表中的元素进行加减乘除运算的函数
#函数工具类模块
from functools import reduce
tuple1= ( 1 , 2 , 3 , 4 , 5 )
result= reduce ( lambda x, y: x+ y, tuple1)
print ( result) #15
tuple2= ( 1 , )
result= reduce ( lambda x, y: x+ y, tuple2, 10 )
print ( result) #11
匿名函数与内置函数的应用–filter
#内置函数filter 过滤作用
list1= [ 12 , 6 , 8 , 9 , 34 , 88 ]
result = filter ( lambda x: x> 10 , list1)
print ( list ( result) ) #[ 12 , 34 , 88 ]
students= [
{ 'name' : 'tom' , 'age' : 20 } ,
{ 'name' : 'lucy' , 'age' : 19 } ,
{ 'name' : 'lily' , 'age' : 13 } ,
{ 'name' : 'mark' , 'age' : 21 }
]
#找出所有年龄大于20 岁的学生的信息
result = filter ( lambda x: x[ 'age' ] >= 20 , students)
print ( list ( result) )
#[ { 'name' : 'tom' , 'age' : 20 } , { 'name' : 'mark' , 'age' : 21 } ]
匿名函数与内置函数的应用–sorted
#按照年龄从小到大排序
students= [
{ 'name' : 'tom' , 'age' : 20 } ,
{ 'name' : 'lucy' , 'age' : 19 } ,
{ 'name' : 'lily' , 'age' : 13 } ,
{ 'name' : 'mark' , 'age' : 21 }
]
student = sorted ( students, key= lambda x: x[ 'age' ] ) #用key指定按哪个排序
print ( student)
#[ { 'name' : 'lily' , 'age' : 13 } , { 'name' : 'lucy' , 'age' : 19 } , { 'name' : 'tom' , 'age' : 20 } , { 'name' : 'mark' , 'age' : 21 } ]
递归函数
#递归函数-- 函数自己调用自己
'' '
回顾讲过的函数类型
普通:def func ( ) : pass
匿名函数:lambda 函数:返回结果
递归函数:普通函数的一种表现形式
特点:
1. 递归函数必须要设定终点,即下面的0
2. 通常有入口,即下面的5
3. 自身调用自身
'' '
def f1 ( n) :
if n== 0 :
return
print ( '--->' , n)
f1 ( n- 1 )
f1 ( 5 )
'' '
-- - > 5
-- - > 4
-- - > 3
-- - > 2
-- - > 1
'' '
#求列表的累加和
def sum ( n) :
if n== 0 :
return n
return n + sum ( n- 1 )
print ( sum ( 10 ) ) #55