Python3 高阶函数:函数式编程的核心工具
Python 高阶函数:把函数当”变量”用,代码能少写一半
写 Python 的时候,你可能已经不经意间用过高阶函数了——比如 map()、filter()、sorted() 的 key 参数。它们的特点是:把一个函数作为参数传给另一个函数。
说白了,高阶函数就是”能操作函数的函数”。就像你把一个数据传给函数处理一样,高阶函数让你把处理逻辑本身传给另一个函数。
这东西为什么有用?因为它把”做什么”和”怎么做”分开了——你告诉我规则,我按规则处理数据。
函数也是”值”,可以传来传去
在 Python 里,函数跟数字、字符串一样,也是对象。你可以把它赋值给变量、放进列表、当成参数传给别的函数。
def square(x):
return x ** 2
# 函数可以赋值给变量
f = square
f(5) # 25
# 函数可以放进列表
funcs = [square, abs, len]
funcs[0](4) # 16
能当参数传,就有了高阶函数:
def apply(func, value):
return func(value)
apply(square, 5) # 25
这个 apply 就是高阶函数——它接收了一个函数参数,在内部调用了它。
map:挨个处理,批量转换
map(func, iterable) 把 func 应用到可迭代对象的每一个元素上,返回一个新的迭代器。
把列表里每个数字都平方:
nums = [1, 2, 3, 4]
squares = map(lambda x: x ** 2, nums)
list(squares) # [1, 4, 9, 16]
把字符串列表转成整数:
str_nums = ["12", "34", "56"]
int_nums = map(int, str_nums)
list(int_nums) # [12, 34, 56]
这里 int 本身就是一个函数,直接传给 map,省了写 lambda。
两个列表对应相加:
a = [1, 2, 3]
b = [4, 5, 6]
sums = map(lambda x, y: x + y, a, b)
list(sums) # [5, 7, 9]