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

liftword4个月前 (01-23)技术文章27

什么是匿名函数?

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

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

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

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

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

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

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

实例分析匿名函数写法

  • 一行代码对包含元组元素的列表进行排序
Bash
# 对下面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)]
  • 一行代码对字典进行排序
Bash
dict1 = {'张三': 90, '李四': 85, '王五': 80, '赵六': 92}
result = sorted(dict1.items(), key=lambda x: x[1])
print(dict(result))
输出结果:
{'王五': 80, '李四': 85, '张三': 90, '赵六': 92}
  • 匿名函数配合映射函数map使用

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

Bash
# 下面使用匿名函数配合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(函数,可迭代参数)

Bash
# 利用过滤函数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}

相关文章

Python中定义函数(python中定义函数的方法)

函数的定义与基本使用在 Python 编程语言中,若要定义一个函数,需借助 def 语句来完成。其语法格式遵循特定的规则,要依次写明函数名、紧跟其后的括号、括号内放置的参数(参数可为空,也可以有多个,...

python入门029:定义函数(定义函数 python)

一、定义函数1、认识函数函数(Function)可以理解为带名字的代码块,用于完成具体的工作。函数的本质就是一段有特定功能、可以重复使用的代码前面我们已经接触过多个函数,比如 input() 、pri...

Python编程:轻松掌握函数定义、类型及其参数传递方式

前言本文带你轻松理解并掌握Python语言中的核心特性——函数:定义语法以及函数形式,并介绍函数的参数传递的两种方式。闲话少叙,开始——记得关注@传新视界 ,点个赞 分享给更多的朋友。函数含义函数(...

二、python类定义的讲解(python类的定义方法)

python是怎么定义类的,看了下面的文章大家就会了,不用多说,开始学习。一、类定义:class <类名>: <语句>类实例化后,可以使用其属性,实际上,创建一个类之后,可以...

Python介绍(python介绍视频)

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

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

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