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
相关推荐
KaMeidebaby6 分钟前
卡梅德生物技术快报|纯化重组蛋白实操详解
人工智能·python·tcp/ip·算法·机器学习
Cloud_Shy6187 分钟前
解读《Effective Python 3rd Edition》:从练气到老魔(第五章 Item 30 - 32)
开发语言·人工智能·笔记·python·学习方法
lizhihai_9931 分钟前
股市学习心得-AI 产业链核心标的梳理清单
大数据·服务器·人工智能·科技·学习
天佑木枫33 分钟前
15天Python入门系列 · 序
开发语言·python
happylifetree34 分钟前
Python017-第二章15.数据容器-dict常用操作
python
问心无愧051340 分钟前
ctf show web入门110
前端·笔记
装不满的克莱因瓶1 小时前
了解 LangChain 中的 LLM 与 ChatModel 的差异
人工智能·python·ai·langchain·llm·agent·chatmodel
吃好睡好便好1 小时前
说说科学爬山
学习·生活
道一231 小时前
Windows系统查看端口占用进程的3种实用方法
windows·笔记
IT知识分享2 小时前
从零开发在线简繁转换工具:OpenCC 实战、避坑经验与方案选型
javascript·python