匿名函数(lambda)的定义:
在python中,不用通过def来声明函数名字,而是通过lambda关键字来定义的函数称为匿名函数,lambda函数能接收任何数量的参数,但只能返回一个表达式的值,该变量就成了一个函数对象。
语法:lambda 参数:表达式(多个参数中间用逗号连接)
使用lambda函数的优点:
可以省去函数的定义,不需要像其他函数一样西先声明再使用,而可以在写函数的同时直接使用函数。
使用场景:
1.需要将一个函数对象作为参数来传递时,可以直接定义一个lambda函数(作为函数的参数或返回值)
举例:
def test(a,b,opt): #opt当做参数传递 print(a) print(b) print(opt(1,8)) test(10,100,lambda x,y:x+y)#匿名函数作为参数
10 100 9
2.要解决的问题符合lambda函数的情况(任意多个参数和一个返回值),并且只有一个地方会使用这个函数,不会在其他地方重用,可以使用lambda函数
举例:
def add(m,n):#普通函数实现两数相加 return m + n print(add(1,9)) result = lambda m,n:m+n#匿名函数实现两数相加 print(result(1,9))
10 10
3.与一些Python的内置函数配合使用,提高代码的可读性
举例:
stus = [ {"name":"zhangsan","age":28}, {"name":"wangwu","age":20}, {"name":"laowang","age":35}] print("排列之前的顺序:") print(stus) print('根据名称:') stus.sort(key=lambda m:m['name']) print(stus) print("根据年龄:") stus.sort(key=lambda g:g['age']) print(stus)
排列之前的顺序: [{'name': 'zhangsan', 'age': 28}, {'name': 'wangwu', 'age': 20}, {'name': 'laowang', 'age': 35}] 根据名称: [{'name': 'laowang', 'age': 35}, {'name': 'wangwu', 'age': 20}, {'name': 'zhangsan', 'age': 28}] 根据年龄: [{'name': 'wangwu', 'age': 20}, {'name': 'zhangsan', 'age': 28}, {'name': 'laowang', 'age': 35}]
偏函数的定义:
在python中,如果在设置某个函数的时候,需要把函数的某个参数设置为固定的值,就可以使用偏函数来实现。
使用偏函数的好处:
将函数里面部分参数固定起来(默认值),后面再进行调用,简化函数的调用
偏函数实现:
1:import functools
2:from functools import partial(只导入了偏函数的库),partial(函数名称,参数=固定值)
例一:求两个数之和
from functools import partial def add(a,b): return a + b z=add(9,100)#普通函数调用 print(z) a = partial(add,b=100) #偏函数调用,将b设置为固定的值,通过a参数绑定partial(add,100)返回一个新的函数,再调用执行 res = a(9) print(res)
109 109
例二:求数字1010的二进制值是多少
from functools import partial print(int('1010',base = 2))#直接转化,int(字符串或者整形,进制数) 不写默认十进制 def int2(str,base):#通过定义函数实现 return int(str,base) print(int2('1111',base=2))#调用函数 res = partial(int2,base=2)#通过使用偏函数,将进制设为预先可知变量 print(res('1111'))
10 15 15