Python之lambda表达式

Python之lambda表达式一、lambda表达式Lambda表达式并不是Python中特有的,很多语言中都有,例如:Jave、C++、C#中都有。根据百度百科中对“Lambda表达式”(lambdaexpression)的解释,它是一个匿名函数,Lambda表达式基于数学中的λ演算得名,直接对应于其中的lambda抽象(lambdaabstraction),是一个匿名函数,即没有函数名的函数。Pytho…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

一、lambda表达式 

二、filter函数

三、map函数

四、reduce函数

五、Lambda表达式与filter、map、reduce函数


一、lambda表达式 

Lambda表达式并不是Python中特有的,很多语言中都有,例如:Jave、C++、C#中都有。

根据百度百科中对“Lambda 表达式”(lambda expression)的解释,它是一个匿名函数,Lambda表达式基于数学中的λ演算得名,直接对应于其中的lambda抽象(lambda abstraction),是一个匿名函数,即没有函数名的函数。

Python中的Lambda表达式是一类特殊的定义函数的形式,使用它可以定义一个匿名函数。与其它语言不同,Python的Lambda表达式的函数体只能有单独的一条语句,也就是返回值表达式语句。其语法如下:

lambda 形参列表 : 函数返回值表达式语句

注意:lambda是一个表达式而不是一个语句。lambda表达式可以接收任意多个参数 (包括可选参数) 并且返回单个表达式的值! 

1、Python语言构建一个函数就是两种方式deflambda下面举例进行说明:

def add1(a, b):
    return a+b
a = 2
b = 3
print("a + b =",add1(a,b))

# 结果为:
a + b = 5
a = 2
b = 3
add2 = lambda a,b : a+b
print('a + b =',add2(a,b))

# 结果为:
a + b = 5
print('type(add1(a,b)):',type(add1(a,b)))
print('type(add2):',type(add2))
# 结果为:
type(add1(a,b)): <class 'int'>
type(add2): <class 'function'>     # 可见,Lambda表达式确实是一种函数的表示方式

2、利用lambda表达式快速组建列表

list = lambda x : x ** 2
l= [list(i) for i in range(10)]
print(l)

# 执行结果
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
list = [(lambda n,i = i : i + n) for i in range(10)]  
print(list[2](9)) 

# 执行结果
11

list[2]是第2个数据(从0开始),(9)是向lambda表达式中插入一个参数,另一个参数是是for循环中的i。
当i = 2,n = 9,执行的结果是11。

二、filter函数

格式:filter(function, iterable)

参数:function — 判断函数;iterable — 可迭代对象。

返回值:返回一个迭代器对象

filter() 函数用于过滤序列,过滤掉不符合条件的元素。接收两个参数,第一个为函数,第二个为序列,序列的每个元素作为参数传递给函数进行判断,返回该序列中使得该函数返回值为True的那些元素组成的filter对象,如果指定函数为None,则返回序列中等价于True的元素。

seq = ['foo', 'x41', '?!', '***']
def func(x):
    return x.isalnum()              #测试是否为字母或数字

filter(func, seq)                   #返回filter对象
# <filter object at 0x000000000305D898>
print(list(filter(func, seq)))      #把filter对象转换为列表

# 执行结果:
['foo', 'x41']

三、map函数

格式:map(func, *iterables)

参数:function — 函数;iterable — 一个或多个序列

内置函数map()把一个函数func依次映射到序列或迭代器对象的每个元素上,并返回一个可迭代的map对象作为结果,map对象中每个元素是原序列中元素经过函数func处理后的结果。

print(list(map(str, range(5))) ) #把列表中元素转换为字符串

# 执行结果:
['0', '1', '2', '3', '4']
def add5(v):  #单参数函数
     return v+5
print(list(map(add5, range(10)))) #把单参数函数映射到一个序列的所有元素

# 执行结果:
[5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
def add(x, y):   #可以接收2个参数的函数
    return x+y
print(list(map(add, range(5), range(5,10))))  #把双参数函数映射到两个序列上

# 执行结果:
[5, 7, 9, 11, 13]

四、reduce函数

格式:reduce(func, sequence[, initial])

参数:function — 函数,有两个参数;iterable — 可迭代对象;initializer — 可选,初始参数。

返回值:返回函数计算结果

标准库functools中的函数reduce()可以将一个接收2个参数的函数以迭代累积的方式从左到右依次作用到一个序列或迭代器对象的所有元素上,并且允许指定一个初始值。

from functools import reduce
seq = list(range(1, 10))
print(reduce(lambda x, y: x+y, seq))

# 执行结果:
45

五、Lambda表达式与filter、map、reduce函数

1、lambda表达式与filter函数

# # 让列表中的偶数输出到屏幕上

f = filter(lambda x : x % 2 == 0, [0,1,2,3,4,5,6,7,8,9])
for i in f:
    print(i)

#执行结果
0
2
4
6
8

2、lambda表达式与map函数

# 让列表中数字全部乘以2

m = map(lambda x : x * 2, [0,1,2,3,4,5,6,7,8,9])
for i in m:
    print(i)

#执行结果
0
2
4
6
8
10
12
14
16
18

3、lambda表达式与reduce函数

# 将列表中数字进行相加

from functools import reduce
r = reduce(lambda x,y : x + y, range(1,101))
print(r)

#执行结果
5050
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/180686.html原文链接:https://javaforall.net

(0)
上一篇 2022年10月18日 上午11:46
下一篇 2022年10月18日 上午11:46


相关推荐

  • 从伯努利分布到多项式分布的条件_伯努利分布的期望

    从伯努利分布到多项式分布的条件_伯努利分布的期望1.伯努利分布(bernoulidistribution)又称0-1分布,指一次随机试验,结果只有两种。也就是一个随机变量的取值只有0和1。其中p表示一次伯努利实验中结果为正或为1的概率。概率计算:

    2022年10月12日
    4
  • vlan教学_不同的vlan转发降低速度

    vlan教学_不同的vlan转发降低速度https://www.cnblogs.com/clover-toeic/p/3741115.html

    2022年8月10日
    13
  • 搭建SIP服务器

    搭建SIP服务器在我的上一篇文章中已经介绍如何通过 SIP 软电话直接通话 但是如果需要支持更多用户互相通话 同时基于安全考虑 需要对用户帐户登录进行验证控制 这些情况下就需要建立 SIP 服务器 SIP 服务器的作用 nbsp nbsp nbsp nbsp nbsp nbsp 呼叫控制和处理功能 业务提供 支持功能 用户管理功能 协议处理功能 路由处理 接入认证 计费信息采集 操作维护 网管功能 互通功能 安全功能 可选 黑白名单功能 拥塞控制功能 可

    2026年3月18日
    2
  • 长亮科技(300348.SZ):公司在AI智能体上早在2025年已经有相关的研发与布局

    长亮科技(300348.SZ):公司在AI智能体上早在2025年已经有相关的研发与布局

    2026年3月13日
    2
  • 通达信客户端程序化下单

    通达信客户端程序化下单通达信是股票市场上最常用的客户端之一 几乎所有的券商都有通达信客户端 而很多朋友在盘中都想有一个自己的下单程序 下面从 2 方面探讨一下通过通达信自动化下单的办法 一 利用模拟按键类程序利用通达信的客户端界面本身 获取各个控件的类型和实例名 通过 AUTOIT 等脚本程序实现通达信客户端的自动化下单 此种方法简单方便 都是通过 windows 的库函数的调用来模拟消息 从而实现自动化下单 但是此方法只

    2026年3月17日
    3
  • 大数据的使用方法,主要有哪些?「建议收藏」

    大数据的使用方法,主要有哪些?「建议收藏」我们正处于福雷斯特研究公司所描述的“用户时代”,这个时代中驱动业务决策的不再是公司,而是用户。基于这个原因,深度理解用户的重要性已经远胜以往,因此许多机构开始使用大数据技术来挖掘用户信息。在这个时代,企图收获成功(甚至是求生存)的在线业务必须切实的理解顾客的体验和行为,因此海量数据的收集及挖掘能力成了这些机构的必备手段。当下,有许多机构的分析仍处于数据的收集上,组织能力的缺乏和技术的限制让这些收…

    2022年5月5日
    43

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号