当前位置: 首页 > news >正文

python学习笔记 | 8.0、函数式编程

=分割线=

一、本节整体思路大纲

  1. 核心前提:Python 里函数也是数据

    • 变量可以存函数
    • 函数名本身就是变量
  2. 核心概念:高阶函数

    • 定义:能接收另一个函数当作参数的函数
  3. 核心逻辑链:

    变量指向函数 → 函数名是变量 → 函数可以当参数传递 → 诞生高阶函数

  4. 小案例:自定义add高阶函数实战


二、知识点详情 + 逐段通俗解释 + 代码实例

1. 关键前提 1:变量可以指向函数

通俗理解
  • abs(-10):加括号 =执行函数,拿到结果
  • abs:不加括号 =函数本身,就像一个数据
  • Python 允许:把「整个函数」赋值给一个变量,后续用变量就能调用函数
代码实例
# 1. 加括号:调用函数,返回计算结果 print(abs(-10)) # 2. 不加括号:单纯表示函数本身 print(abs) # 3. 把函数赋值给变量 f f = abs # 4. 通过变量 f 调用原 abs 函数 print(f(-10))
执行流程
  1. f = abs→ 变量f绑定了绝对值函数
  2. f(-10)→ 本质就是abs(-10)

2. 关键前提 2:函数名本质就是变量

通俗理解

absprint这些函数名,本质就是普通变量,只是默认绑定了官方功能。

如果强行给函数名赋值其他数据,它就不再是函数了。

代码实例
# 原本正常使用 print(abs(-20)) # 强行把 abs 改成整数 10 abs = 10 # 报错:整数不能被调用 # print(abs(-20))
报错原因

abs原本指向函数,现在被改成整数10

加括号abs()想执行,但是数字不能执行,所以报错。

恢复方法:关闭当前终端,重新打开 Python 即可。


3. 核心重点:什么是高阶函数?

官方定义

如果一个函数的参数,可以接收另一个函数,它就是高阶函数。

小白人话

普通函数参数只传数字、字符串、列表;

高阶函数厉害在:可以传一个函数进去当工具使用

经典实例(原文核心案例)
# 定义高阶函数:第三个参数 f 专门用来接收函数 def add(x, y, f): # 先用 f 处理 x、y,再相加 return f(x) + f(y) # 调用:把 abs 函数传进去 res = add(-5, 6, abs) print(res)
一步步拆解执行流程
  1. 调用add(-5, 6, abs)
    • x = -5
    • y = 6
    • f = abs(f 变成了绝对值函数)
  2. 执行f(x)abs(-5)= 5
  3. 执行f(y)abs(6)= 6
  4. 相加:5 + 6 = 11
  5. return 返回结果

4. 本节最终小结(必背)

  1. 不加括号 = 函数本身,可以赋值给变量;
  2. 函数名是特殊变量,可以被重新赋值;
  3. 接收函数作为参数的函数 = 高阶函数
  4. 高阶函数是函数式编程的基础。

三、配套练习题(由浅入深,巩固知识点)

练习 1 基础题

仿照案例,写一个高阶函数:

定义一个函数calc(a, b, func)

传入max函数,计算两个数的最大值。

#❌️ # ### 练习 1 基础题 # 仿照案例,写一个高阶函数: # 定义一个函数 `calc(a, b, func)`, def calc(a, b, max): if a > b: max=a elif b > a: max=b return max # 传入 `max` 函数,计算两个数的最大值。 print(calc(1,2,max)) #✅️ def calc(a,b,func):#定义函数,以函数作为参数 return func(a,b) print(calc(1,2,max))#调用函数
点击查看答案
def calc(a, b, func): return func(a, b) result = calc(18, 25, max) print(result)

练习 2 理解题

判断对错:

  1. abs是函数,abs()是函数调用 ( )
  2. 变量不能指向函数 ( )
  3. 高阶函数一定需要传入函数参数 ( )
点击查看答案
  1. ✅ 对
  2. ❌ 错
  3. ✅ 对

练习 3 进阶题

自定义高阶函数,传入min函数,求-93的最小值之和。

点击查看答案
def add_num(m, n, f): return f(m, n) print(add_num(-9, 3, min))

练习 4

需求:

定义高阶函数demo(x, y, f)

传入内置max,计算157的最大值

def demo(x,y,f): return f(x,y) print(demo(15,7,max))

练习 5

仿照上面格式:

定义高阶函数fun(m, n, f)

传入min,计算-20 和 8的最小值

def fun(m,n,f): return f(m,n) print(fun(-20,8,min))

练习 6(回归课本原版题型)

仿照廖雪峰add例子:

定义函数add_num(x, y, f)

传入abs

计算:-12 和 9 分别取绝对值之后相加

def add_num(x,y,f): return f(x)+f(y) print(add_num(-12,9,abs))

练习 7

自定义高阶函数,

abs分别处理-3025,再求和

def test(m,n,f): return f(m)+f(n) print(test(-30,25,abs))

=分割线=

http://www.jsqmd.com/news/715342/

相关文章:

  • 终极指南:5步让Win11Debloat彻底优化您的Windows系统性能
  • 2026届学术党必备的降AI率工具实际效果
  • Phi-3-mini模型算法学习助手:动态图解与代码示例生成
  • UI-TARS:字节跳动开源的企业级中后台前端解决方案深度解析
  • 智能体驱动信息检索:从RAG到AgenticIR的架构演进与实践
  • HyperWorks许可证使用时空间热力图分析
  • 如何高效实现MediaFire批量下载:专业级Python自动化工具完整指南
  • 告别CAN的‘奢侈’,聊聊汽车上那条不起眼的LIN总线:低成本通信的生存哲学
  • 避开这些坑!Logisim做计算机组成实验时最容易犯的10个错误(附解决方案)
  • OpenWrt内核崩溃日志抓不到?用pstore/ramoops给高通IPQ95xx路由器装个‘黑匣子’
  • AffordBot框架:细粒度具身推理在机器人控制中的应用
  • 语义分割模型选型指南:医疗影像、自动驾驶、遥感,你的场景该用哪个?
  • 全球领先制造企业(如汽车、航空航天)Windchill许可证管理最佳实践
  • 储能EMS选型避坑指南:嵌入式Linux、MCU、PLC、SoC和IoT设备到底怎么选?
  • 别自己写DDS了!用Vivado CORDIC IP核快速生成高精度正弦波(附MATLAB验证脚本)
  • Tiled世界管理终极指南:如何高效构建大型游戏场景
  • Spire.Office在.NET 8下生成PDF的两种姿势:带水印的官方版 vs 去水印的实战版
  • Visual Studio Dev Essentials:面向每位开发者的免费实用工具
  • 显卡驱动如何彻底清理?5步高效使用DDU完整指南
  • Node.js环境下如何高效解析Word文档?word-extractor零依赖解决方案深度解析
  • 五一古玩字画回收市场直击|正规机构坚守岗位,五大实力派保障假期变现无忧 - 品牌排行榜单
  • 如何轻松退出Windows Insider计划:OfflineInsiderEnroll终极指南
  • 2026年家电清洗培训怎么选?山东小绿人家电清洗培训实地走访:1680元三合一课程与学员反馈 - 品牌企业推荐师(官方)
  • 停滞 20 年、被教条牢牢困住!免疫组化凭这项核心技术,实现跨越式突破
  • Windows 11终极优化指南:使用Win11Debloat轻松清理系统臃肿
  • 联想小新/戴尔电脑装Ubuntu双系统必看:解决RST错误和Secure Boot关闭的完整流程
  • 微信小程序加密二选一:第三方CryptoJS AES vs 官方UserCryptoManager,我最终选了它
  • PowerShell执行策略详解:除了Set-ExecutionPolicy,Win11/10上还有这些更灵活的脚本运行方法
  • 告别外磁场!VGSOT-MRAM如何用电压脉冲搞定SOT-MTJ的确定性翻转?
  • SAP采购订单行项目增强:用BADI ME_GUI_PO_CUST添加自定义字段的保姆级教程