匿名函数格式:lambda a,b : a+b
当一些简单的函数不需要用定义函数这么长的代码时可使用匿名函数
#用s接收这个函数
s=lambda a,b : a+b
s(1,2)
print(s(1,2))
#a,b相当于函数中的参数,a+b相当于函数中的retrun
#匿名函数不可直接调用出结果,需要借助print
匿名函数可作为函数的参数出现
内置函数:max(参数,key=通过这个值来比较(比较的依据)
如下例
List1=[{'a':20,'b':30,'c':23},{'a':76,'b':34,'c':19},{'a':24,'b':17,'c':98},{'a':56,'b':22,'c':11},{'a':13,'b':42,'c':109}]
#通过a键来比较列表中每个字典的大小
s=max (List1,key=lambda X:X['a'])
print(s)
{'a': 76, 'b': 34, 'c': 19}
内置函数map:格式:map(func,iterable)
List1=[5,8,9,10,3,6]
#若想列表全部加二
result=map(lambda x : x+2 , List1)
print(result)
print(list(result))
<map object at 0x000001EDE431D3A0>
[7, 10, 11, 12, 5, 8]
map函数的输出为map对象的地址,可以通过强转,生成列表。
匿名函数中也可做判断,格式如下:
func=lambda x: x if x % 2 ==0 else x + 2
s=func(3)
print(s)
5
一个map与匿名函数的判断小例子:
#对List1 做 奇偶数判断,奇数加2
s=map(lambda x: x if x%2 ==0 else x+2 , List1)
print(list(s))
[7, 8, 11, 10, 5, 6]
内置函数:reduce:对列表中的元素作加减乘除的函数,需要导包,结构为reduce(func,sequence,initial=None)(个人理解元组为特殊的列表,也能放进去)
#reduce 对列表元素做加减乘除的函数,需要导包
from functools import reduce
#reduce结构为:reduce(func,sequence)
Tuple1=(2,3,6,10,56,1)
a=reduce (lambda x,y:x+y,Tuple1)
print(a)
78
底层执行过程为:
当tuple2=(1,)是否也能进行上述运算?
#tuple变为(1,)
tuple2=(1,)
result=reduce(lambda x,y:x+y,tuple2)
print(result)
1
这是因为reduce中有默认值reduce(func,sequnce,initial=None)
但是将initial进行关键字传参时会报错
#将initial变为10
tuple2=(1,)
result=reduce(lambda x,y:x+y,tuple2,initial=10)
print(result)
result=reduce(lambda x,y:x+y,tuple2,initial=10)
^
SyntaxError: invalid character in identifier
所以不能用关键字传初始化值,但是可以用位置参数传参
#将initial变为10,用位置参数传参
tuple2=(1,)
result=reduce(lambda x,y:x+y,tuple2,10)
print(result)
11
将initial变为10,用Tuple1的情况如下
#将initial变为10,用tuple1的情况
result=reduce(lambda x,y:x+y,Tuple1,10)
print(result)
result1=reduce
-70
为什么是-70呢,原来initial将会作为第一个x进行计算!!!
同样再用除法进行验证!
#将initial变为10,用tuple1的情况
result1=reduce(lambda x,y:x/y,Tuple1,8)
print(result1)
0.00039682539682539677
验证正确,initial将是计算的第一个值,为None时减法除法将不进行计入计算,但当元组内只有一个元素时也能进行计算