首页 > 技术文章 > 匿名函数及其搭配使用

tanhuan-share 2020-05-31 18:06 原文

1. 匿名函数 lambda
 
def 函数名(参数列表):
  函数体
 
 
格式:
lambda [形参1], [形参2], ... : [单行表达式] 或 [函数调用]
例如:
func = lambda x: print(x ** 10) func(2)

  

lambda定义和普通函数的区别:
1. lambda 没有函数名
2. lambda 参数列表外没有括号
3. lambda 函数体中,只能实现简单的表达式计算或函数调用
4. lambda 函数体中,不能使用Return,if,while,for-in 这些都不行
5. lambda 函数体中,可以使用if 实现的三目运算符.

func = lambda a, b : a if a > b else b
print(func(11, 2))
使用场景:
变量 = lambda ....
 
一般情况下,因为lambda的局限性,使得他不能实现复杂功能,只能实现一些简单功能
那么在使用时,一般会实现一个简单的,一次性使用的场景。
匿名韩式一般可以搭配高阶函数一起使用。

2. 高阶函数

 

2.1  map() 关系映射
map() 会根据提供的函数对指定序列做映射.
第一个参数 function 以参数序列中的每一个元素调用 function 函数,返回包含每次 function 函数返回值的新列表.
l = [1,2,3,4,5]
def hah(x):
    return x ** 2
c = list(map(hah,l))   # 函数名作为参数传入别的函数时传入函数名没有括号
print(c)

  输出:

   [1, 4, 9, 16, 25]

  

2.2   functools.reduce()
 
reduce() 函数会对参数序列中元素进行累计.
函数将一个数据集合中的所有数据进行下列操作:
用传给 reduce 中的函数 function(有两个参数)先对集合中的第 1、2 个元素进行操作.
得到的结果再与第三个数据用 function 函数运算, 最后得到一个结果.
l = [1,2,3,4,5]
import functools
d = functools.reduce(lambda a,b:a*b ,l)
print(d)

  输出:

120

  应用:

求1~100的和
print(functools.reduce(lambda a, b: a + b, [x for x in range(1, 101)]))

 

2.3   filter()
filter() 函数用于过滤序列, 过滤掉不符合条件的元素, 返回一个 filter 对象, 如果要转换为列表, 可以使用 list() 来转换.
该接收两个参数, 第一个为函数, 第二个为序列, 序列的每个元素作为参数传递给函数进行判, 然后返回 True 或 False, 最后将返回 True 的元素放到新列表中.
 
l = list(range(1,11))
print(list(filter(lambda x :x % 2 == 0,l)))
输出为:
[2, 4, 6, 8, 10]

  

 

 

 
 
 

推荐阅读