Python入门学习(九)Python的高级语法与用法(三)函数式编程
一、lambda表达式
#lambda表达式 #冒号前面为参数,后面为返回值,必须为一个表达式,不能是代码块 #调用,可以赋值给一个变量 f = lambda x, y: x+y print(f(1,2))
二、三元表达式
#三元表达式 #如果x>y,则取x,反之取y x = 2 y = 1 r = x if x > y else y print(r)
#三元表达式常常用于lambda表达式 f = lambda x, y: x if x > y else y print(f(1,12))
三、map
#map非函数,是一个类 list_x = [1,2,3,4,5,6,7,8] #求列表各元素的对应值 def square(x): return x * x #用for循环实现 list_y = [] for x in list_x: list_y.append(x*x) print(list_y) #用map实现 #第一个参数为函数,第二个参数为序列 #把序列中每个元素按函数规则一一映射 r = map(square, list_x) print(r) #输出一个map对象 print(list(r)) #转换为列表输出
很多情况下lambda表达式和map结合使用
#用lambda和map结合的方式实现 r = map(lambda x: x * x, list_x) print(list(r))
#map也可以传入多个列表、元组,依次对应lambda中参数 list_x = [1, 2, 3, 4, 5, 6] list_y = (1, 3, 5, 7, 9, 11) r = map(lambda x, y: x * 2 + y, list_x, list_y) print(list(r))
四、reduce
from functools import reduce #reduce是一个函数,其内的lambda函数必须是两个参数 #reduce连续调用函数,第一次执行函数会先取序列前两个元素运算后作为第二次执行函数的x参数,y参数顺序取序列中第三个元素,按此类推 #即((((1+2)+3)+4)+5)+6 list_x = [1, 2, 3, 4, 5, 6] r = reduce(lambda x,y:x+y, list_x) print(r)
#一个旅行者,一开始位于(0,0)位置,经过如下x中元素的移动 #求最终位置坐标 x = [(1,3), (2, -2), (-2, 3)] final_pos = reduce(lambda x, y :(x[0]+y[0], x[1]+y[1]), x) print(final_pos)
五、filter
#filter通过设置真伪判断可以过滤掉相关元素
list_x = [1, 0, 1, 0, 0, 1]
#剔除掉值为0的元素
#依据filter第一个参数的真假来判断当前元素是否保留
r = filter(lambda x: True if x==1 else False, list_x)
print(r)
print(list(r))
#本例中也可以简化直接如下
r = filter(lambda x:x,list_x)
print(list(r))
list_y = [1, 2, 3, 4, 5, 6, 7, 8, 9]
#剔除偶数
r = filter(lambda x:1 if x%2==1 else 0, list_y)
print(list(r))
list_z = ['a', 'B', "c", "D", "E", "f"]
#剔除小写字母
r = filter(lambda x:True if x < 'a' else False,list_z)
print(list(r))
浙公网安备 33010602011771号