Python 中的高阶函数允许您操控函数,以增加代码的灵活性和重用性。您可以使用嵌套作用域或可调用对象来创建高阶函数。
此外,functools
模块提供了用于处理高阶函数的工具,使其更容易创建装饰器和其他函数操控结构。本教程将探索 Python 中高阶函数的概念,并演示如何创建它们。
什么是高阶函数?
高阶函数是一种要么接受一个或多个函数作为参数,要么返回一个函数作为结果的函数。以下是 Python 中高阶函数的一些属性:
要在 Python 中创建高阶函数,您可以使用嵌套作用域或可调用对象。下面我们将简要讨论这两种方法。
使用嵌套作用域创建高阶函数
定义高阶函数的一种方法是在另一个函数内部定义一个函数并返回该内部函数。
示例
让我们观察以下示例来创建 Python 中的高阶函数。在这个示例中,multiplier
函数接受一个参数 a
并返回另一个函数 multiply
,该函数计算 a * b
的值。
def multiplier(a):
def multiply(b):
return a * b
return multiply
multiply_second_number = multiplier(5)
Result = multiply_second_number(10)
print("两个数字的乘积是: ", Result)
输出
执行上述程序后,您将得到以下结果:
两个数字的乘积是: 50
使用可调用对象创建高阶函数
创建高阶函数的另一种方法是使用可调用对象。这涉及到定义一个包含 __call__
方法的类。
示例
这里使用可调用对象创建高阶函数的另一种方法。
class Multiplier:
def __init__(self, factor):
self.factor = factor
def __call__(self, x):
return self.factor * x
multiply_second_number = Multiplier(2)
Result = multiply_second_number(100)
print("两个数字的乘积是: ", Result)
输出
执行上述程序后,您将得到以下结果:
两个数字的乘积是: 200
使用 functools
模块的高阶函数
functools
模块提供了作用于其他函数或返回其他函数的高阶函数。根据该模块的目的,任何可调用对象都可以被视为函数。
使用 wraps()
处理高阶函数
在此示例中,my_decorator
是一个高阶函数,它使用 functools.wraps()
函数修改 invite
函数的行为。
import functools
def my_decorator(f):
@functools.wraps(f)
def wrapper(*args, **kwargs):
print("调用", f.__name__)
return f(*args, **kwargs)
return wrapper
@my_decorator
def invite(name):
print(f"欢迎来到, {name}!")
invite("教程之家")
输出
执行上述程序后,您将得到以下结果:
调用 invite
欢迎来到, 教程之家!
使用 partial()
处理高阶函数
functools
模块中的 partial()
函数用于创建一个可调用的 “partial” 对象。这个对象本身表现得像一个函数。partial()
函数接收另一个函数作为参数,并冻结该函数的一部分参数,从而产生一个新的具有简化签名的对象。
示例
在以下示例中,用户定义的函数 myfunction()
作为 partial
函数的参数使用,并为原始函数的一个参数设置了默认值。
import functools
def myfunction(a, b):
return a * b
partfunction = functools.partial(myfunction, b=10)
print(partfunction(10))
输出
执行上述程序后,您将得到以下结果:
100
使用 reduce()
处理高阶函数
类似于上述方法,functools
模块提供了 reduce()
函数,该函数接收两个参数:一个函数和一个可迭代对象。然后返回一个单一值。参数函数从左到右累积地应用于两个参数列表。第一次调用的结果成为第一个参数,而列表中的第三个项成为第二个参数。这个过程一直重复直到列表耗尽。
示例
import functools
def mult(x, y):
return x * y
n = 4
num = functools.reduce(mult, range(1, n+1))
print(f'{n} 的阶乘是: ', num)
输出
执行上述程序后,您将得到以下结果:
4 的阶乘是: 24