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
相关推荐
M78佐菲1 小时前
Linux学习笔记:TCP协议
linux·笔记·学习·tcp/ip·算法
噜~噜~噜~2 小时前
操作系统笔记-2.3.5.1.1生产者-消费者问题
笔记·操作系统
yi.Ist2 小时前
数据定义语言-DDL操作
数据库·学习·mysql·oracle·大海豚
傲笑风2 小时前
【openvino】tinybert基于openvino服务化部署(四)
人工智能·python·自然语言处理·nlp·bert·openvino
维基框架3 小时前
WIKI 知识库 v1.1.1 正式发布
人工智能·python
骐骥16 小时前
学习:javaScriptProxy和registerJavaScriptProxy有什么区别,能注册多少个对象
学习·鸿蒙
Huathy-雨落江南,浮生若梦6 小时前
Caddy 学习笔记 - 反向代理与 IP 封禁
笔记·学习·tcp/ip
谢白羽7 小时前
SGLang的AWQ量化笔记
笔记·python·sglang
噜~噜~噜~7 小时前
操作系统笔记-2.3.5.2 读者-写者问题
笔记·操作系统
迷迭香yy7 小时前
基金档案数据工程实战从收入分析到持仓穿透的Python解析 IG50免费开源股票数据API接口
开发语言·python