python 匿名函数和递归

一、匿名函数的格式

匿名函数简化了函数的定义,通过lambda 参数1,2…:运算返回的格式创建一个函数对象,我们用f来接受,然后f就相当于函数名,我们调用的时候就用函数名+(参数).

#匿名函数:简化函数定义
#格式: lambda 参数1,参数2:运算
f=lambda a,b:a+b
sum=f(2,0)
print(sum)

二、匿名函数作为参数

#匿名函数作为参数
def func(x,y,func):
    print(x,y)
    print(func)
    print(func(x,y))
func(500,20,lambda x,y:x+y)

三、与max函数结合使用

max()函数可以用力得到一个可迭代对象中的一个最大值,但是,如果出现像list2列表中的情况,列表中全是字典,我们想知道在所有字典中a的最大值,显然用max(list2)是不可行的,我们只好这样,定义寻找最大值的key,定义以key=lambda x:x['a]为关键字进行找最大值。

list1=[3,5,8,9,0]
m=max(list1)
print("列表的最大值:",m)
list2=[{'a':10,'b':20},{'a':13,'b':20},{'a':29,'b':20}]
m=max(list2,key=lambda x:x['a'])
print("列表最大值:",m)

四、与map函数结合使用

map的用法:map(对可迭代对象的每个元素进行的操作,可迭代对象)

#方式1
list1=[3,4,6,7,8,9,9,0,2,5]
result=map(lambda x:x+2,list1)
print(list(result))
#方式2
for index,i in enumerate(list1):
    print(index,end=' ')
    print(i)
    print()
    list1[index]=i+2
print()
print(list1)

五、和reduce函数结合使用

进行累加操作和类减之类的操作

from functools import reduce
tuple1=(3,5,7,8,9,1)
result=reduce(lambda x,y:x+y,tuple1)
print(result)
#首先取x=3,y=5相加为8,然后将8放入元组首位置,再取x=8,和y=7......
tuple2=(1,) #只有一个元素的元组
result=reduce(lambda x,y:x+y,tuple2,10)  #将10作为默认值
print(result)
#可试试减法和别的

六、与filter函数结合

list1=[12,6,8,9,23,89,1,345]
result=filter(lambda x:x>10,list1)
print(list(result))
students=[
    {'name':'tom','age':20},
    {'name':'lucy','age':19},
    {'name':'liming','age':24},
    {'name':'lihua','age':18}
]
#找出所有年龄大于20岁的学生
result=filter(lambda x:x['age']>20,students)
print(list(result))
#按照年龄大小排序
result=sorted(students,key=lambda x:x['age'])
print(result)

七、变量作用域

函数作用域: LEGB
L:local 本地 局部变量
E: encloseing 嵌套
G: global 全局
B: built-in 内置的

a=100
def func():
    a=10
    def inner_func():
        #a=1
        print(a)
        print(max)   #内置的
    inner_func()
func()

八、递归函数

特点:
1.有终止条件
2.自己调用自己
3.通常有一个入口

#递归函数
def sum(n): #1~n
    if n==0:
        return 0
    else:
        return n+sum(n-1)
result=sum(10)
print(result)

函数递归
汉诺塔

num=0
def  han(n,ftower,ttower,atower):
    if n==1: #直接将盘从原始塔移动到目标塔
        print(n,"from",ftower,"to",ttower)
    else:
        #先借助目标塔将n-1个盘子移动到过渡塔
        han(n-1,ftower,atower,ttower)
        #然后将最后一个盘从原始塔移动到目标塔
        print(n,"from",ftower,"to",ttower)
        #最后借助原始塔,将前n-1个盘从过度塔移动到目标塔
        han(n-1,atower,ttower,ftower)
#主程序
a=int(input("please enter n:"))   #输入有几个盘子
han(a,"A","B","C")
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值