1、匿名函数用法
匿名函数:定义函数的时候,不需要定义它的函数名
#这个是普通函数,不是匿名函数
def add(x,y):
s = x + y
print(s)
add(1,2)
'''
#匿名函数的格式
lambda parameter_list:expression
parameter_list:参数的参数
expression:只能是表达式,不能是代码块
注:lambdax,y:a = x+y这个写法是错误的,因为“a=x+y”只能是表达式,不能是代码块
'''
f = lambda x,y: x+y
print("匿名函数",f(1,2))
2、三元表达式
其他语言写法:x > y?x : y
python写法:条件为真时返回的结果 if 判断语句 else 条件为假时的结果
#python三元表达式的写法的例子
x = 2
y = 1
f = x if x > y else y
print(f)
**匿名函数与三元表达式连用**
#注:x if x > y else y这个是一个表达式
f = lambda x,y: x if x > y else y
print('max=',f(1,2))
3、map用法
map是一个类
map(func,*iterables)参数的解释
func:传的是一个函数名,可以是python内置的,也可以是自定义的。
*iterables:传的是一个可以迭代的对象,例如列表,元组,字符串这样的。
#求每个数的平方,用的是for循环
list_x = [1,2,3,4,5,6,7,8,9]
list_y = []
def square(x):
return x * x
for v in list_x:
f = square(v)
list_y.append(f)
print(list_y)
> 结果:[1, 4, 9, 16, 25, 36, 49, 64, 81]
#求每个数的平方,用map
list_x = [1,2,3,4,5,6,7,8,9]
f = map(lambda x:x * x,list_x)
# 打印的是map对象
print(f)
#打印的是结果
print(list(f))
> 结果:[1, 4, 9, 16, 25, 36, 49, 64, 81]
**map与lambda**
#传入多个参数的用法
list_x = [1,2,3,4,5,6,7,8,9]
list_y = [1,2,3,4,5,6]
f = map(lambda x,y: x * x + y,list_x,list_y)
print(f)
print(list(f))
3、reduce用法
reduce参数说明:
def reduce(function, sequence, initial)
functiom:传入的函数名
sequence:传入的是序列
initial:初始值
#举一例子
from functools import reduce
list_x = [1,2,3,4,5,6,7,8]
# reduce函数连续计算,连续调用lambda
result = reduce(lambda x,y:x+y,list_x)
print(result)#36
'''
在这里解释一下,什么不给y赋值,y的是哪里来的?
在reduce()函数第一次调用lambda匿名函数时,将list_x中的1和2分别赋值给x和y;
在reduce()函数第二次调用lambda匿名函数时,将list_x中的3赋值给了x,而将第一次运行的x+y的结果赋值了此时的y;
在reduce()函数第三次调用lambda匿名函数时,将list_x中的4赋值给了x,而将第二次运行的x+y的结果赋值了此时的y;
............................................直到循环完list_x列表中的值
# (((((((1+2)+3)+4)+5)+6)+7)+8
'''
#例二
list_y = ['1','2','3','4','5','6','7','8']
r1 = reduce(lambda x,y:x+y,list_y,"aaaa")
print(r1) #aaaa12345678
'''
如果reduce()函数设置初始值,那么reduce()调用步骤?
在reduce()函数在第一次调用lambda函数时,将list_y中的‘1’赋值给x,而将初始值“aaaa”赋值给y;
在reduce()函数在第二次调用lambda函数时,将list_y中的‘2’赋值给x,而将第一次x+y的值赋值给此时y;
....................................................直到循环list_x为止。
(((((((('aaaa'+'1')+'2')+'3')+'4')+'5')+'6')+'7')+'8')
'''
4、filter用法
filter 过滤
list_x = [1,0,0,1,0,0,1,1]
list_y = ['a','B','c','F','e','Z']
# 去除0数字,保留1
r = filter(lambda x:True if x==1 else False,list_x)
# 去除小写字母,保留大写字母
r1 = filter(lambda y:True if ord(y)<97 else False,list_y)
print(list(r))
print(list(r1))
结果
[1, 1, 1, 1]
[‘B’, ‘F’, ‘Z’]