高阶函数(Higher-Order Function)
Python 中的高阶函数(Higher-Order Function)是一个至少满足下列一个条件的函数:
接受一个或多个函数作为输入。
输出一个函数。
高阶函数在 Python 中非常强大和灵活,它们允许你将函数作为参数传递给其他函数,或者从函数中返回函数。这种特性使得代码更加模块化和可重用。下面是一些常见的高阶函数例子:
1. map()
map() 函数接受一个函数和一个可迭代对象(如列表或元组)作为输入,将传入的函数依次作用到序列的每个元素上,并返回一个新的迭代器。
python
def square(x):
return x * x
numbers = [1, 2, 3, 4, 5]
squared = list(map(square, numbers))
print(squared) # 输出: [1, 4, 9, 16, 25]
2. filter()
filter() 函数用于过滤序列,过滤掉不符合条件的元素,返回由符合条件元素组成的新迭代器。
python
def is_even(n):
return n % 2 == 0
numbers = [1, 2, 3, 4, 5, 6]
even_numbers = list(filter(is_even, numbers))
print(even_numbers) # 输出: [2, 4, 6]
3. reduce()
reduce() 函数会对参数序列中元素进行累积。函数将一个两元操作函数作用在序列[x1, x2, x3, ...]上,并将其结果并为一个单一返回值,例如用于求和或求积。注意,reduce() 在 Python 3 中被移出了内建函数,但可以通过 functools 模块来访问。
python
from functools import reduce
def add(x, y):
return x + y
numbers = [1, 2, 3, 4, 5]
sum_of_numbers = reduce(add, numbers)
print(sum_of_numbers) # 输出: 15
4. lambda 表达式
虽然 lambda 表达式本身不是一个高阶函数,但它经常与高阶函数一起使用,提供简洁的函数定义。lambda 函数是一个可以接收任何数量的参数但只能有一个表达式的函数。
python
numbers = [1, 2, 3, 4, 5]
squared = list(map(lambda x: x**2, numbers))
print(squared) # 输出: [1, 4, 9, 16, 25]
自定义高阶函数
def applyTwice(func, value):
"""接受一个函数和一个值,返回该函数两次作用于该值的结果"""
return func(func(value))
def addTen(x):
"""将 10 加到 x 上"""
return x + 10
print(applyTwice(addTen, 5))
仿制map函数
#仿写map函数
def WxpMap(f,lista):
"f为变化函数,lista为列表"
listE=[]
for i in range(len(lista)):
listE.append(f(lista[i]))
return listE
listD=[1,2,3,4,5,6]
listE=WxpMap(lambda x:x**2,listD)
print(listE)
仿制reduce函数(用什么来存储结果呢?)
#仿写reduce函数
def WxpReduce(f,lista):
"f为变化函数,lista为列表"
#加法的时候,设置result=0;乘法的时候设置result=1;(其他运算怎么办?)
result=0
for i in lista:
result=f(result,i)
return result
listD=[1,2,3,4,5,6]
#求平方和
result=WxpReduce(lambda x,y:x+y**2,listD)
print(result)