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

liftword6个月前 (01-23)技术文章38

什么是匿名函数?

定义:没有函数名的自定义函数
场景:函数体非常简单,使用次数很少,没有必要声明函数,通常搭配高阶函数使用。
高阶函数是能够把函数当成参数进行传递的函数,如:映射函数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}

相关文章

学编程傻傻分不清什么是方法(method)和函数(function)?

在编程语言中有两个很基础的概念,即方法(method)和函数(function)。如果达到了编程初级/入门级水平,那么你肯定在心中已有了初步的答案。除去入参、返回值、匿名函数之类的正确的形式内容之外,...

需要了解的 10 个基本 Python 概念

1. 创建 Python 文件从 python.org 或任何其他来源下载 Python 后,您可以通过使用 .py 扩展名命名 Python 文件来创建 Python 文件。例如,如果要创建一个 m...

Python介绍(python介绍视频)

Python是什么?Python是一个开放的高级编程语言,拥有大量的用户。相对其他语言来说,它语法简洁、逻辑清晰,非常适合未学习过编程的人作为第一门语言。这也是为什么现在一些中学将Python作为信息...

Python小案例46-集合的定义和创建

Python中的集合(Set)是一种无序且不重复的数据结构。它是由一组唯一的元素组成,可以进行交集、并集、差集等常见的集合操作。在Python中,可以使用两种方式来定义和创建集合:使用大括号{}来创建...

Python编程之旅:定义自定义异常的艺术

Python编程之旅:定义自定义异常的艺术引言在实际开发过程中,我们经常会遇到各种各样的错误情况,如数据类型不符、资源访问失败等。这时候,合理地使用异常处理机制就显得尤为重要了。Python内置了许多...

Python基础入门之自定义函数详解(python如何运行自定义函数)

学习Python,离不开函数,我们学习了许多内置函数。比如:print,int,sum等,可以直接使用它们,来实现某些功能。这些函数已经事先在Python中定义好了。我们直接拿来用,非常方便。因此,我...