太棒了!欢迎来到 【跟着AI学Python】第19天!🎉今天我们将学习 Python 中函数式编程的核心工具:lambda 匿名函数 + 三大高阶函数 map()、filter()、sorted()!
💡 它们能让你用更简洁、声明式的方式处理数据,告别冗长的 for 循环!
🎯 第19天目标:
✅ 掌握 lambda 匿名函数 的语法与使用场景✅ 熟练使用 map() 对序列做批量转换✅ 灵活运用 filter() 过滤数据✅ 精准控制 sorted() 的排序逻辑
📘 一、lambda:匿名函数
🔹 语法
🔹 示例对比
| | |
|---|
| def square(x): return x**2 | lambda x: x**2 |
| def add(a, b): return a + b | lambda a, b: a + b |
# 直接调用print((lambda x: x * 2)(5)) # 10# 赋值给变量(不推荐,不如 def 清晰)double = lambda x: x * 2print(double(3)) # 6
✅ 最佳实践:
- 仅在简短、一次性场景使用(如传给
map/sorted)
📘 二、map():批量转换
🔹 作用
将函数应用到序列的每个元素,返回迭代器(惰性求值)
🔹 语法
🔹 示例
💡 何时用 map vs 列表推导式?
- 已有现成函数(如
str.upper)→ map 更简洁:words = ["hello", "WORLD"]upper_words = list(map(str.upper, words)) # ['HELLO', 'WORLD']
📘 三、filter():条件过滤
🔹 作用
保留序列中使函数返回 True 的元素
🔹 语法
filter(function, iterable)
🔹 示例
✅ 优势:
📘 四、sorted():灵活排序
🔹 核心参数
key=function:指定排序依据(函数接收元素,返回比较值)reverse=True:降序排列
🔹 示例
🔹 实战:复杂对象排序
🔑 技巧:
💻 综合实战:数据清洗流水线
假设有一组用户数据,需要:
users = ["Alice@GMAIL.COM", "bob@yahoo.com", "invalid-email", "CHARLIE@outlook.com"]# 流水线处理valid_emails = sorted( map(str.lower, filter(lambda email: "@" in email, users)), key=lambda email: email.split("@")[1] # 按 @ 后部分排序)print(valid_emails)# 输出: ['bob@yahoo.com', 'charlie@outlook.com', 'alice@gmail.com']
✅ 优势:
✅ 今日小任务
- 用
map + lambda:将 ["1", "2", "3"]转为整数列表 → [1, 2, 3] - 用
sorted + lambda:按单词长度对 ["apple", "pie", "banana"]
排序 → ['pie', 'apple', 'banana']
📝 小结:高阶函数速查表
| | |
|---|
map(func, iter) | | |
filter(func, iter) | | |
sorted(iter, key=func) | | |
✅ 黄金法则:
- 简单逻辑 → 优先用 列表推导式(更 Pythonic)
lambda仅用于简短、一次性函数
🎉 恭喜完成第19天!你已掌握 函数式编程的利器,能写出更简洁、更声明式的代码!
继续加油,你的代码正变得越来越优雅!🐍