【Python】lambda表达式、map函数、reduce函数、filter函数

一、lambda表达式

简单来说,所以只用一行或者一句话来表达的函数就可以用lambda表达式,也称为lambda函数;

【举个栗子】

def f(x):
    return x * x


f(3)

【Python】lambda表达式、map函数、reduce函数、filter函数_第1张图片

上面的函数的含义是:给函数f传递一个参数x,它会返回x*x;所以我们传递给函数f一个实参3,它就返回3*3,也就是9;


现在我们将上面的代码改成lambda表达式:

# 如果将上面的函数转换成lambda表达式
# 具体格式:

f = lambda x: x * x # 这里的f是函数名,所以调用该函数的时候就是函数名()


print(f(5))

# 这里的f是函数名,所以调用该函数的时候就是函数名()

# lambda之后写一个x表示输入;
# 输入之后写输出,输入输出之间用英文的冒号:分开
# 冒号之后写 x*x 表示输出的结果是x*x
# 所以函数 f = lambda x: x * x 的含义是,输入一个x输出结果为x*x

【Python】lambda表达式、map函数、reduce函数、filter函数_第2张图片

 可以看出来结果一样;


那lambda表达式除了输入一个数之外,还可以输入多个数吗?

当然可以!

这里我们输入两个数:

f = lambda x, y: x * y  

print(f(2, 3))
# 函数 f = lambda x, y: x * y  的含义是,输入一个x,y输出结果为x*y

lambda表达式还可以放进函数里进行嵌套;

【举个栗子】

实现计算a * x * x + b * x + c;

def quar(a, b, c):
    return lambda x: a * x * x + b * x + c


f = quar(1, -1, 2)
print(f(5))

# f = quar(1, -1, 2)表示给函数quar传递实参,此时a=1,b=-1,c=2

# print(f(5)) 表示输入的x为5;

注意 f = quar(1, -1, 2)只是给函数传递了实参,f(5)才是真正掉调用了该函数


二、Filter函数

filter 函数用于过滤元素,将 函数对象(function) 依次作用于 可迭代对象(iterable)的每个元素,将返回值为 True 的 元素组成一个 新的可迭代对象 返回。

(python3 统一返回迭代器;需要通过list函数,set函数将他们转换)

它的使用形式如下:

 filter(function, iterable)

# function 表示一个函数对象

# iterable表示一个可迭代对象


【代码演示】

num_list = [1, 2, 3, 4, 5, 8]


def f(x):
    if x % 2 == 0:
        return x


print(list(filter(f, num_list)))

解释,如果输入的是偶数,返回该值;

【Python】lambda表达式、map函数、reduce函数、filter函数_第3张图片


将f函数改成lambda表达式:

num_list = [1, 2, 3, 4, 5, 8]
print(list(filter(lambda x: x % 2 == 0, num_list)))

【Python】lambda表达式、map函数、reduce函数、filter函数_第4张图片


三、Map函数

Map函数通常有两个参数,第一个参数是函数对象,第二个参数就是可迭代对象;

Map函数的作用是,将可迭代对象的每一个元素都应用到第一个参数函数中;

【Python】lambda表达式、map函数、reduce函数、filter函数_第5张图片

 在上面这个图片,cook是一个函数对象,是一个可迭代对象,Map函数就是将可迭代对象中的每一个元素拿出来,放在cook这个函数对象里“执行”,将,变成了


【举个栗子】

num_list = [1, 2, 3, 4, 5]  # 一个可迭代对象


def duble(x):
    return x * 2


result = map(duble, num_list)
# print(result)
# 直接输出map函数,输出的是一个迭代器
# 想要正常输出必须将它转换
print(list(result))
# print(result)
# 直接输出map函数,输出的是一个迭代器

# 函数后面不加括号,表示它是整个函数体,是一个函数对象;

# 函数后面加括号(括号中必须传入实参),表示调用该函数的执行结果

【Python】lambda表达式、map函数、reduce函数、filter函数_第6张图片


四、Reduce函数

reduce() 函数会对参数序列中元素进行累积。

Reduce函数虽然和Map函数的参数形式比较类似,但它们有一些本质的区别;

【Python】lambda表达式、map函数、reduce函数、filter函数_第7张图片

是一个函数对象,是一个可迭代对象,它在运行的时候会这样操作:将后面列表中的两个元素作为一组参数传递给eat,接下来将这个生成的结果和下一个元素作为一组参数再传递给eat,以此类推,直到所有的元素都被传递,则生成最后的结果;

 【Python】lambda表达式、map函数、reduce函数、filter函数_第8张图片 


【举个栗子】

【Python】lambda表达式、map函数、reduce函数、filter函数_第9张图片


【代码演示】

from functools import reduce


def add(x, y):
    return x + y


num_list = [1, 2, 3, 4, 5]
print(reduce(add, num_list))

【Python】lambda表达式、map函数、reduce函数、filter函数_第10张图片

在Python3中,reduce函数已经不是一个内置函数,已经把它调整到一个模块(functools)中了,所以使用reduce函数的时候要进行导包;

reduce函数和其余两个函数的区别:

        使用map函数,结果是一个map对象;使用filter函数的时候,结果是一个filter对象,我们都需要使用list函数将他们转换为列表;

        而ruducr函数,他在add函数里的作用是求和最后生成的是一个和的结果,所以这里就直接输出流15,不需要进行转换。

我们最开始学了lambda表达式,只用一行就可以表达的函数都可以写成lambda表达式,显然,上面的add函数符合标准,我们将它改成lambda表达式:

from functools import reduce

num_list = [1, 2, 3, 4, 5]

result = reduce(lambda x, y: x + y, num_list)
print(result)

【Python】lambda表达式、map函数、reduce函数、filter函数_第11张图片

 这样写代码更加简洁了,但是写代码也不是越简洁越好。

你可能感兴趣的:(Python,数据分析,数据挖掘)