Python的lambda 匿名函数结合reduce,内置函数filter,map的用法

python 中的匿名函数的使用
匿名函数优点:
   - 使用Python写一些脚本时,使用lambda可以省去定义函数的过程,让代码更加精简。
  - 对于一些抽象的,不会被别的地方再重复使用的函数,有时候函数起个名字也是个难题,使用lambda不需要考虑命名的问题

  - 使用lambda在某些时候然后代码更容易理解

#coding=gbk
# #python 中的匿名函数的使用
# 匿名函数优点:
#   - 使用Python写一些脚本时,使用lambda可以省去定义函数的过程,让代码更加精简。
#   - 对于一些抽象的,不会被别的地方再重复使用的函数,有时候函数起个名字也是个难题,使用lambda不需要考虑命名的问题
#   - 使用lambda在某些时候然后代码更容易理解
def fun(x,y):
    return x*y
print(fun(2,4))

r = lambda x,y:x*y 
print(r(2,4))
# 格式:
#   lambda 参数列表:return [表达式] 变量
#   由于lambda返回的是函数对象(构建的是一个函数对象),所以需要定义一个变量去接收

#对字典进行排序
data = [{"name":"wang","age":10},{"name":"xiaoming","age":20},{"name":"banzhang","age":10}]
data.sort(key = lambda x: x['age'])
print(data)
# [{'name': 'wang', 'age': 10}, {'name': 'banzhang', 'age': 10}, {'name': 'xiaoming', 'age': 20}]

#把lambda当做一个变量
def test(a,b,func):
    result = func(a,b)
    return result 
num = test(12,23,lambda x,y:x+y)
print(num)  #35



#可以直接在后面传参
c = (lambda x, y :x if x > y else y )(12,19)
print(c)        #19,直接判断数字的大小

print((lambda x:x**3)(3))   #27

lambda 结合 reduce函数,reduce()只返回一个数值

#lambda返回的值,可以结合map ,reduce,filter内置函数使用
# 在Python 3里,reduce()函数已经被从全局名字空间里移除了,它现在被放置在fucntools模块里
from functools import reduce 

# reduce(function, sequence, starting_value):对sequence中的item顺序迭代调用function,
# 如果有starting_value,还可以作为初始值调用。function接收的参数个数只能为2,先把sequence中第一个值和第二个值当参数传给function,
# 再把function的返回值和第三个值当参数传给function,然后只返回一个结果。

#即 先计算 0 +1 = 1,再将x = 1,y = 2计算x+y 的值
s = reduce(lambda x,y:x+y, range(101))
print(s)    #5050

s1 = reduce(lambda x, y: x+y ,range(101), 50)
print(s1)       # 5100, 最后一个数可作为要进行相加的数
lambda 结合 map函数,map()函数返回一个list列表

# map(function, sequence) :对sequence中的item依次执行function(item),将执行结果function(item)组成一个List返回。
#返回的是一个列表list 
m = map(lambda x: x * x, range(5))
print(list(m))  #[0, 1, 4, 9, 16]
m1 = map(lambda x,y :x+y-3,range(3),[7,8,9])
print(list(m1))    #[4, 6, 8]

lambda 结合 filter函数,filter()函数

返回执行结果为TRUE的入参


#filter(function, sequence):对sequence中的item依次执行function(item),
# 将执行结果为True的item组成一个List/String/Tuple(取决于sequence的类型)。
f = filter(lambda x:x % 3 == 0,range(10))
print(list(f))      # [0, 3, 6, 9]

猜你喜欢

转载自blog.csdn.net/qq_40587575/article/details/80914622