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
相关推荐
2301_8039346122 分钟前
Go语言如何做网络爬虫_Go语言爬虫开发教程【指南】
jvm·数据库·python
WL_Aurora23 分钟前
Python爬虫实战(六):新发地蔬菜价格数据采集.
爬虫·python
盲敲代码的阿豪25 分钟前
Python 入门基础教程(爬虫前置版)
开发语言·爬虫·python
一口吃俩胖子33 分钟前
【脉宽调制DCDC功率变换学习笔记021】时域性能准则
笔记·学习
starvapour1 小时前
SSH笔记
笔记·ssh
weixin199701080161 小时前
[特殊字符] 智能数据采集:数字化转型的“数据石油勘探队”(附Python实战源码)
开发语言·python
@杰克成2 小时前
Java学习30
java·开发语言·学习
次元工程师!2 小时前
LangFlow开发(三)—Bundles组件架构设计(3W+字详细讲解)
java·前端·python·低代码·langflow
三品吉他手会点灯2 小时前
C语言学习笔记 - 40.数据类型 - scanf函数的编程规范与非法输入处理
c语言·开发语言·笔记·学习
大G的笔记本2 小时前
synchronized 的原理(简单版)
笔记