Python 常用内置高阶函数
Python 是一门非常优雅的语言,支持函数式编程风格,内置了很多强大的高阶函数工具,能让你用更简洁的方式处理数据、控制流程。
本文将系统介绍 Python 中最常用的一批高阶函数,包括:
map()
、filter()
、reduce()
、zip()
、sort()
、sorted()
- 还有一些你可能听说过但没用过的:
any()
、all()
、enumerate()
、lambda
表达式、functools.partial()
参考文章:Python 常用内置高阶函数 | 简单一点学习 easyeasy.me
目录
- 什么是高阶函数
map()
:批量转换神器filter()
:数据筛选器reduce()
:一步步归并(需导入)zip()
sort()
和sorted()
:排序any()
和all()
:布尔判断简化器enumerate()
:带索引地遍历lambda
表达式:快速写个函数functools.partial()
:函数参数定制神器- 高阶函数组合使用
- 总结
1. 什么是高阶函数
高阶函数(Higher-Order Function)就是可以接收函数作为参数,或者返回一个函数的函数。
Python 中常用的高阶函数,能让你用“操作函数”的方式处理一整组数据,配合 lambda
表达式尤其方便。
2. map()
:批量转换神器
map(function, iterable)
对序列中的每个元素执行相同的函数操作,返回一个新的可迭代对象。
示例
nums = ["1", "2", "3"]
res = map(int, nums)
print(list(res)) # [1, 2, 3]
3. filter()
:数据筛选器
filter(function, iterable)
函数返回 True
的保留,False
的丢掉。
示例
nums = [1, 2, 3, 4]
res = filter(lambda x: x % 2 == 0, nums)
print(list(res)) # [2, 4]
4. reduce()
:一步步归并
需要先导入:
from functools import reduce
reduce(function, iterable)
每次拿两个值相加合并,最终只返回一个值,也就是累加的意思。
示例
res = reduce(lambda x, y: x + y, [1, 2, 3, 4])
print(res) # 10
5. zip()
zip(iter1, iter2, ...)
把多个列表按位置配对成元组。
示例
names = ["Tom", "Jerry"]
ages = [20, 25]
print(list(zip(names, ages))) # [('Tom', 20), ('Jerry', 25)]
6. sort()
和 sorted()
:排序
list.sort()
是方法,就地修改原列表sorted()
是函数,返回新列表,不改原数据
示例
nums = [3, 1, 4]
nums.sort()
print(nums) # [1, 3, 4]nums = [3, 1, 4]
print(sorted(nums)) # [1, 3, 4]
支持自定义排序:
words = ["apple", "pear", "banana"]
res = sorted(words, key=lambda x: len(x))
print(res) # ['pear', 'apple', 'banana']
7. any()
和 all()
:布尔判断简化器
这两个函数用来对一组布尔值快速判断:
any()
:只要有一个是 True 就返回 Trueall()
:全部为 True 才返回 True
示例
flags = [False, True, False]
print(any(flags)) # Trueprint(all(flags)) # False
适合快速判断多个条件是否成立。
8. enumerate()
:带索引地遍历
enumerate(iterable, start=0)
常用在 for
循环里,能同时拿到“索引 + 元素”。
示例
words = ["a", "b", "c"]
for i, w in enumerate(words):print(i, w)
# 输出:
# 0 a
# 1 b
# 2 c
也可以设置起始索引:
for i, w in enumerate(words, start=1):print(i, w)
9. lambda
表达式:快速写个函数
匿名函数的语法糖,常用于 map()
、filter()
、sorted()
等函数中。
lambda 参数: 表达式
示例:对每个数平方
nums = [1, 2, 3]
res = map(lambda x: x ** 2, nums)
print(list(res)) # [1, 4, 9]
10. functools.partial()
:函数参数定制神器
可以给函数预先“绑定”一些参数,生成一个新的函数。
示例:固定 int
的进制参数
from functools import partialint2 = partial(int, base=2)
print(int2("1010")) # 10
类似给函数预设了部分参数,后面调用时就不用再传了。
11. 高阶函数组合使用
这些函数也可以组合使用,像拼积木一样构建你的数据处理逻辑。
示例:取出偶数并平方
nums = [1, 2, 3, 4, 5]
res = map(lambda x: x**2, filter(lambda x: x % 2 == 0, nums))
print(list(res)) # [4, 16]
12. 总结
Python 高阶函数非常适合用在数据处理、函数式编程、简化逻辑等场景。常用函数如下表:
函数 | 功能说明 |
---|---|
map() | 批量应用函数,元素转换 |
filter() | 过滤不符合条件的元素 |
reduce() | 把一组值归并成一个值 |
zip() | 多序列打包成元组 |
sort() | 就地排序(列表方法) |
sorted() | 返回新排序列表 |
any() | 有一个为真就为真 |
all() | 所有为真才为真 |
enumerate() | 带索引遍历 |
lambda 表达式 | 快速写简短函数 |
functools.partial() | 固定参数生成新函数 |