百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

Python学习笔记 | 匿名函数lambda、映射函数map和过滤函数filter

itomcoil 2025-05-03 14:45 16 浏览

什么是匿名函数?

定义:没有函数名的自定义函数
场景:函数体非常简单,使用次数很少,没有必要声明函数,通常搭配高阶函数使用。
高阶函数是能够把函数当成参数进行传递的函数,如:映射函数map和过滤函数filter。
格式:lambda 参数:返回值(参数可以是多个,返回值就是函数体,必须得有)

首先用一个简单的实例——求给定半径的圆面积,来剖析一下匿名函数的应用场景。

  • 使用普通自定义函数
def circular_area(r):
    result = 3.14 * r * r
    return result

print('半径为{}的圆面积是{}'.format(10, circular_area(10)))

输出结果:
半径为10的圆面积是314.0
  • 使用匿名函数
area = lambda r: 3.14 * r * r
print('半径为{}的圆面积是{}'.format(10, area(10)))

输出结果:
半径为10的圆面积是314.0

通过对比可以发现,匿名函数不需要预先定义,直接把函数体写在一行代码内,随用随写、灵活方便,避免过多定义函数,增加阅读量。

实例分析匿名函数写法

  • 一行代码对包含元组元素的列表进行排序
# 对下面list1按照年龄排序
list1 = [('张三', 22), ('李四', 18), ('王五', 24), ('赵六', 16)]

# 使用lambda配合内置函数sorted的key参数进行排序,生成新列表
list2 = sorted(list1, key=lambda x: x[1])
print(list2)
输出结果:
[('赵六', 16), ('李四', 18), ('张三', 22), ('王五', 24)]

# 也可以使用列表的sort方法进行排序,不生成新列表
list1.sort(key=lambda x: x[1], reverse=True)
print(list1)
输出结果:
[('王五', 24), ('张三', 22), ('李四', 18), ('赵六', 16)]
  • 一行代码对字典进行排序
dict1 = {'张三': 90, '李四': 85, '王五': 80, '赵六': 92}
result = sorted(dict1.items(), key=lambda x: x[1])
print(dict(result))
输出结果:
{'王五': 80, '李四': 85, '张三': 90, '赵六': 92}
  • 匿名函数配合映射函数map使用

映射函数格式:map(函数,可迭代参数)

# 下面使用匿名函数配合map(映射函数),求一个列表的所有元素的平方值,并生成新列表
m1 = map(lambda x: x ** 2, [1, 2, 3, 4, 5])
print(m1)
输出结果:
<map object at 0x0000022866FDBF70>
# 通过结果可以看到,映射函数的返回值是一个映射对象地址
# 使用list函数把映射结果转换成列表
m2 = list(m1)
print(m2)
输出结果:
[1, 4, 9, 16, 25]
# 由此可以看出,map函数是通过函数参数和可迭代参数映射出一个新的可迭代数据


# 利用map函数,将已知列表里的字符串首字母变成大写
names = ['jack', 'tom', 'ribo', 'jekiiy']
m1 = map(lambda x: x.capitalize(), names)
result = list(m1)
print(result)
输出结果:
['Jack', 'Tom', 'Ribo', 'Jekiiy']
  • 匿名函数配合过滤函数filter使用

过滤函数格式:filter(函数,可迭代参数)

# 利用过滤函数filter将列表中的空值过滤掉,0是空值,负数不算空值
numbers = [3, 8, 0, -2, 9, 15, -1, 0, 45]
# filter第一个参数为None时,就代表过滤空值
result = filter(None, numbers)  
print(list(result))
输出结果:
[3, 8, -2, 9, 15, -1, 45]


# 利用filter和lambda过滤掉奇数,形成一个新的偶数列表
numbers = [3, 8, 0, -2, 9, 15, -1, 0, 45]
result = filter(lambda x: x % 2 == 0, numbers)
print(list(result))
输出结果:
[8, 0, -2, 0]


# 利用filter和lambda把列表中的数字过滤出来
list1 = ['abc', 98, '34', 0, 9, 'uiy', 'jike', -5]
result = filter(lambda x: type(x) == int, list1)
print(list(result))
输出结果:
[98, 0, 9, -5]


# 利用过滤函数把列表中的数字和字符串型的数字过滤出来
list1 = ['abc', 98, '34', 0, 9, 'uiy', 'jike', -5]
result = filter(lambda x: isinstance(x, int) or x.isdigit(), list1)
print(list(result))
输出结果:
[98, '34', 0, 9, -5]


# 利用过滤函数将字典里成绩大于90的学生数据过滤出来
dict1 = {'张三': 90, '李四': 85, '王五': 80, '赵六': 92, '田七': 75, '周八': 100}
result = filter(lambda x: x[1] >= 90, dict1.items())
print(dict(result))
输出结果:
{'张三': 90, '赵六': 92, '周八': 100}

相关推荐

selenium(WEB自动化工具)

定义解释Selenium是一个用于Web应用程序测试的工具。Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。支持的浏览器包括IE(7,8,9,10,11),MozillaF...

开发利器丨如何使用ELK设计微服务中的日志收集方案?

【摘要】微服务各个组件的相关实践会涉及到工具,本文将会介绍微服务日常开发的一些利器,这些工具帮助我们构建更加健壮的微服务系统,并帮助排查解决微服务系统中的问题与性能瓶颈等。我们将重点介绍微服务架构中...

高并发系统设计:应对每秒数万QPS的架构策略

当面试官问及"如何应对每秒几万QPS(QueriesPerSecond)"时,大概率是想知道你对高并发系统设计的理解有多少。本文将深入探讨从基础设施到应用层面的解决方案。01、理解...

2025 年每个 JavaScript 开发者都应该了解的功能

大家好,很高兴又见面了,我是"高级前端进阶",由我带着大家一起关注前端前沿、深入前端底层技术,大家一起进步,也欢迎大家关注、点赞、收藏、转发。1.Iteratorhelpers开发者...

JavaScript Array 对象

Array对象Array对象用于在变量中存储多个值:varcars=["Saab","Volvo","BMW"];第一个数组元素的索引值为0,第二个索引值为1,以此类推。更多有...

Gemini 2.5编程全球霸榜,谷歌重回AI王座,神秘模型曝光,奥特曼迎战

刚刚,Gemini2.5Pro编程登顶,6美元性价比碾压Claude3.7Sonnet。不仅如此,谷歌还暗藏着更强的编程模型Dragontail,这次是要彻底翻盘了。谷歌,彻底打了一场漂亮的翻...

动力节点最新JavaScript教程(高级篇),深入学习JavaScript

JavaScript是一种运行在浏览器中的解释型编程语言,它的解释器被称为JavaScript引擎,是浏览器的一部分,JavaScript广泛用于浏览器客户端编程,通常JavaScript脚本是通过嵌...

一文看懂Kiro,其 Spec工作流秒杀Cursor,可移植至Claude Code

当Cursor的“即兴编程”开始拖累项目质量,AWS新晋IDEKiro以Spec工作流打出“先规范后编码”的系统工程思维:需求-设计-任务三件套一次生成,文档与代码同步落地,复杂项目不...

「晚安·好梦」努力只能及格,拼命才能优秀

欢迎光临,浏览之前点击上面的音乐放松一下心情吧!喜欢的话给小编一个关注呀!Effortscanonlypass,anddesperatelycanbeexcellent.努力只能及格...

JavaScript 中 some 与 every 方法的区别是什么?

大家好,很高兴又见面了,我是姜茶的编程笔记,我们一起学习前端相关领域技术,共同进步,也欢迎大家关注、点赞、收藏、转发,您的支持是我不断创作的动力在JavaScript中,Array.protot...

10个高效的Python爬虫框架,你用过几个?

小型爬虫需求,requests库+bs4库就能解决;大型爬虫数据,尤其涉及异步抓取、内容管理及后续扩展等功能时,就需要用到爬虫框架了。下面介绍了10个爬虫框架,大家可以学习使用!1.Scrapysc...

12个高效的Python爬虫框架,你用过几个?

实现爬虫技术的编程环境有很多种,Java、Python、C++等都可以用来爬虫。但很多人选择Python来写爬虫,为什么呢?因为Python确实很适合做爬虫,丰富的第三方库十分强大,简单几行代码便可实...

pip3 install pyspider报错问题解决

运行如下命令报错:>>>pip3installpyspider观察上面的报错问题,需要安装pycurl。是到这个网址:http://www.lfd.uci.edu/~gohlke...

PySpider框架的使用

PysiderPysider是一个国人用Python编写的、带有强大的WebUI的网络爬虫系统,它支持多种数据库、任务监控、项目管理、结果查看、URL去重等强大的功能。安装pip3inst...

「机器学习」神经网络的激活函数、并通过python实现激活函数

神经网络的激活函数、并通过python实现whatis激活函数感知机的网络结构如下:左图中,偏置b没有被画出来,如果要表示出b,可以像右图那样做。用数学式来表示感知机:上面这个数学式子可以被改写:...