一、匿名函数的格式
匿名函数简化了函数的定义,通过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")