【python内置高阶函数】lambda,reduce,map,filter

1.lambda匿名函数

#求圆形的面积  

import math
def fun_cir(r):
s = math.pi*r*r
return s
print(f"s={fun_cir(3)}")

print(lambda r:math.pi*7*8)  # 报错,<function <lambda> at 0x00000205945E3D90>

result = lambda r:math.pi*r*r
result(4)

 

 

def fun_caculate(o):
if o == '+':
return lambda a,b: a+b
elif o =='-':
return lambda a,b:a-b
elif o == '*':
return lambda a,b:a*b
elif o == '/':
return lambda a,b:a/b
# f接受fun函数传参后的返回值
f = fun_caculate("+")
# 返回值是一个lambda函数,因此还要传参
print(f"f={f(3,4)}")


lis = [("土豆",1.1,3.1),
("番茄",1.2,4.1),
("萝卜",2.1,3.13),
("南瓜",1.21,2.67)]
lis.sort(key = lambda x:x[1] )
print(lis)


  小结:

    格式: lambda x:expression

    lambda是匿名函数,可以使程序看起来更简洁

    lambda输出时,需要有一变量接收,不然报错<function <lambda> at 0x00000205945E3D90>

 

 

 

2.map函数

 

#传入一个iterables

lis = ['1','a','e']
p = map(lambda x:x.upper(),lis)
print(list(p))

 

 

#传入多个iterables

lis1 = [1,2,3]

lis2 = [9,5,3]

p = map((lambda x,y:x-y),lis1,lis2)
print(list(p))

  小结:

    格式 map (func,一或多个iterables)

    map函数直接输出时,返回的是迭代器iterator类型,要list转换

    python2中map函数返回是列表list类型;python3中,map函数返回是iterator类型  

 

3.reduce函数

# 使用reduce函数之前要导包
from functools import reduce
lis = [2,3,5]
# reduce 有点类似于累积乘除加减什么的
p = reduce(lambda x,y: x+y, lis)
print(p)

p1 = reduce(lambda x,y: x*y, lis,4)
print(p1)

  小结:

    使用reduce函数之前要导包,from funtools import reduce

     reduce函数通常结合lambda函数使用

    格式: reduce(func,iterables,初始值)  

    运算过程:如果没有初始值,首先进行一次运算,运算结果给第一个参数,第二个参数为下一个要处理的参数,依次类推(http://www.cppcns.com/jiaoben/python/205660.html)

 

4.filter函数

 

lis = [-1,-2,0,3,4,5]
print(list(filter(lambda x:x>0 , lis)))


lis = ['a','D','e','M']
str_up = filter(lambda x:x == x.upper(),lis)
print(list(str_up))

lis = ['拜月','拜拜了您勒','图图','牛爷爷']

print(list(filter(lambda x:x.startswith('拜'), lis)))

  小结:

    将iterable中为True的值返回,然后list转化后输出

    格式 filter(func,iterables) 

 

 

 
posted @ 2022-06-15 18:24  淫鬻  阅读(16)  评论(0编辑  收藏  举报