python学习笔记 | 8.3、函数式编程-匿名函数

=分割线=

一、什么是匿名函数?

普通函数:需要起名字 ,用 def 定义。

匿名函数:不用起名字 ,临时用一下,用 lambda 关键字定义,一行写完。

适用场景:就简单一个计算逻辑,不想单独写一个 def 函数,省事。

二、语法格式(死记这一个就行)

复制代码
lambda 参数: 表达式

拆解:

  1. lambda:固定开头,代表匿名函数
  2. 冒号前面:函数的参数(可以一个、多个、无参数)
  3. 冒号后面:只能写 1 个表达式 ,不用写 return,表达式结果自动返回

三、和普通函数对比,一眼看懂

普通有名函数

复制代码
def f(x):
    return x * x

等价的匿名函数

复制代码
lambda x: x * x

意思:接收一个参数x,返回 x*x 的结果。

四、官方例子拆解

复制代码
list(map(lambda x: x * x, [1,2,3,4,5]))
  1. map:把后面列表里的每一个数,都丢进前面的函数处理
  2. lambda x:x*x:每个数自己乘自己
  3. 结果:[1,4,9,16,25]

五、匿名函数 3 种常用写法(记下来够用一辈子)

1. 一个参数

复制代码
# 普通函数
def add1(x):
    return x+1

# 匿名函数
lambda x: x+1

2. 两个参数

复制代码
# 计算两数之和
lambda x,y: x + y

3. 没有参数

复制代码
# 直接返回固定值
lambda: 100 + 200

六、匿名函数可以赋值给变量(当成普通函数用)

匿名函数没名字,但可以赋值给一个变量,后面直接调用:

复制代码
# 把匿名函数存到变量f里
f = lambda x: x * x

# 像普通函数一样调用
print(f(5))  # 输出 25

七、课后练习:用匿名函数改造代码

原题代码(普通函数写法):

复制代码
def is_odd(n):
    return n % 2 == 1

L = list(filter(is_odd, range(1, 20)))
print(L)

(用 lambda 代替)

思路:

is_odd 作用是判断一个数是不是奇数:n % 2 == 1

直接把这个逻辑写成匿名函数塞进去就行:

复制代码
# 直接用lambda,不用单独定义is_odd函数
L = list(filter(lambda n: n % 2 == 1, range(1, 20)))
print(L)

运行结果:[1, 3, 5, 7, 9, 11, 13, 15, 17, 19]

八、必记总结(只背这 4 句)

  1. 匿名函数用 lambda,不用 def、不用起名字。
  2. 格式:lambda 参数: 表达式
  3. 只能写一个表达式,自动返回结果,不用写 return。
  4. 适合临时简单逻辑,搭配 map、filter 用最方便。

=分割线=filter

1. 一句话定义

filter = 过滤器

作用:把符合条件的留下来,不符合的丢掉。

2. 语法格式

复制代码
filter(函数, 可迭代对象)

拆解:

  • 第一个参数:判断条件的函数(返回 True 或 False)

  • 第二个参数:要过滤的一堆数据(列表、range 等)

  • 规则:

    函数返回

    True

    → 留下

    函数返回

    False

    → 扔掉

    =分割线=

练习题 1

写一个匿名函数,接收参数 x,返回 x * 2

复制代码
lambda x:x*2

练习题 2

写一个匿名函数,接收两个参数 x, y,返回两数之和

复制代码
lambda x,y : x+y`

练习题 3

写一个匿名函数,接收参数 x,返回 x 的平方再加 5

复制代码
lambda x : (x*x)+5

练习题 4

写一个匿名函数,判断一个数是不是偶数,返回布尔值

复制代码
lambda x:x%2==0

练习题 5

把下面普通函数,改写成 lambda 匿名函数

复制代码
def calc(a):
    return a + 10

lambda a : a+10
相关推荐
星恒随风6 分钟前
Linux基础IO万字详解:从文件描述符fd到重定向、FILE缓冲机制及MiniShell升级
linux·运维·笔记·学习·状态模式
东来也_八门12 分钟前
我用麦当劳开放的 MCP,把那个最冷门的营养接口做成了真实配餐求解器
python
AI日报派送佬19 分钟前
Ultralytics YOLO 模型训练技巧与最佳实践
人工智能·python·深度学习·yolo·机器学习·计算机视觉
小雪崩24 分钟前
嵌入式学习 day65:Linux驱动进阶——pinctrl 子系统和 platform 驱动框架
linux·学习·驱动
zhaowangji27 分钟前
mujoco仿真(机械臂推动正方体到指定位置)
人工智能·python
shixiexunnie28 分钟前
Raw NAND 驱动库学习
驱动开发·学习
数据管道工31 分钟前
解析一个老网站:GBK 编码、页面结构漂移与限流退避
python
只睡四小时33 分钟前
AI 生成 PPTX:11 页课件编译出 429 个形状
javascript·python·pptx·ai生成ppt·ooxml
leisoo809734 分钟前
股票筹码分布怎么用获利比例成本区间与集中度实战 IG50免费开源股票数据API接口
开发语言·jvm·数据库·python·开源
ControlM36 分钟前
从官方 CDN 里扒出 TRAE (TraeCode) 历史版本安装包
python·逆向·trae