Python 函数如何返回一个函数?


Python 支持一等函数。事实上,所有Python 中的函数都是一等函数。Python 可以从函数中返回函数,将函数存储在诸如列表之类的集合中,并且通常像对待任何变量或对象一样对待它们。Python 中的函数可以返回函数,因为函数被视为一等对象。这意味着您可以将函数赋值给变量,将其作为参数传递给另一个函数,或在函数中将其用作返回值。在其他函数中定义函数并返回函数都是可能的。

在此代码中,外部函数定义并返回内部函数。然后,您可以调用外部函数并将它的返回值赋给一个变量。

现在,f 是对内部函数的引用。您可以像调用任何其他函数一样调用它。

示例

def outer():
   def inner():
      print("Hello from inner!")
   return inner
f = outer()
f()

输出

Hello from inner!

使用带返回值的函数的参数

您可以通过不同的方式使用带返回值的函数的参数。一种方法是将参数传递给外部函数,并在内部函数中使用它们。

在此代码中,外部函数接收参数 x 并返回一个打印其值的函数。您可以像这样调用它:

示例

def outer(x):
   def inner():
      print("x is", x) 
   return inner
f = outer(10)
f()

输出

x is 10

另一种方法是在调用内部函数时向其传递参数。

在此代码中,外部函数返回一个接收参数 y 并打印其值的函数。您可以像这样调用它:

示例

def outer():
   def inner(y):
      print("y is", y) 
   return inner
f = outer()
f(20)

输出

y is 20

高阶函数

在 Python 中,函数可以返回另一个函数作为其结果。这被称为“高阶函数”。

示例

def adder(x):
   def inner(y):
      return x + y 
   return inner

在此示例中,我们定义了一个名为 adder 的函数,它接收单个参数 x。在 adder 内部,我们定义了另一个名为 inner 的函数,它接收单个参数 y 并返回 xy 的和。

adder 没有直接返回总和,而是返回 inner 函数本身。这意味着,例如,当我们调用adder(1) 时,我们将得到一个新的函数,该函数将其参数加 1。

在 Python 中从函数返回函数

要在 Python 中从函数返回函数,您可以在第一个函数内定义一个新函数,然后返回它。此技术称为嵌套函数或闭包。然后,返回的函数可以赋值给变量并在以后调用。

示例

def adder(x):
   def inner(y):
      return x + y 
   return inner

add_one = adder(1)
print(add_one(5))
# prints 6

输出

6

在此示例中,adder 是一个接收参数 x 并返回一个新函数 inner 的函数。inner 函数接收参数 y 并返回 xy 的和。当我们调用adder(1) 时,它返回一个新的函数对象 inner,其中 x 设置为 1。然后,我们可以将此新函数对象赋值给变量 add_one 并使用参数 5 调用它,这将产生输出 6。

总的来说,这种模式可用于编写更灵活和可重用的代码,尤其是在与闭包和柯里化等其他高阶编程概念结合使用时。

示例

def create_multiplier(factor):
   def multiplier(number):
      return number * factor
   return multiplier

double = create_multiplier(2) 
triple = create_multiplier(3)

print(double(5))	# Output: 10
print(triple(5))	# Output: 15

输出

10
15

在此示例中,create_multiplier() 是一个接收 factor 参数并返回一个新函数 multiplier() 的函数。multiplier 函数接收一个 number 参数并返回 number 与 factor 相乘的结果。我们通过使用不同的 factor 调用 create_multiplier() 来创建两个新函数 double 和 triple。然后,我们可以使用不同的数字调用这些函数以获得所需的输出。

必须注意的是,当我们调用 create_multiplier() 时,它每次都会返回一个新的函数对象。这意味着 double 和 triple 是不同的函数,即使它们是使用相同的 create_multiplier() 函数创建的。

在 Python 中从函数返回函数

从 Python 函数返回函数可以成为创建灵活且可重用代码的强大工具。通过返回函数,我们可以抽象化函数工作方式的细节,并为用户提供更高级别的接口。在本文中,我们将探讨如何使用嵌套函数或 lambda 函数从 Python 函数返回函数。

示例:嵌套函数

def adder(x):
   def inner(y):
      return x + y 
   return inner

add_one = adder(1) 
print(add_one(5))	# prints 6

输出

6

在此示例中,adder 是一个接收参数 x 并返回一个新函数 inner 的函数。inner 函数接收参数 y 并返回 xy 的和。当我们调用 adder(1) 时,它返回一个新的函数对象 inner,其中 x 设置为 1。然后我们将此新函数赋值给变量 add_one。当我们调用 add_one(5) 时,它等效于调用 inner(5),其中 x 设置为 1。

总的来说,这种模式可用于编写更灵活和可重用的代码,尤其是在与闭包和柯里化等其他高阶编程概念结合使用时。

这是另一个在 Python 中返回函数的函数示例,但这次使用 lambda 函数。

示例:Lambda 函数

def make_incrementor(n):
   return lambda x: x + n

increment_by_five = make_incrementor(5)
increment_by_ten = make_incrementor(10)

print(increment_by_five(3))	# Output: 8 
print(increment_by_ten(3))	# Output: 13

输出

8
13

在此示例中,make_incrementor() 是一个接收参数 n 并返回一个 lambda 函数的函数,该 lambda 函数接收参数 x 并返回 xn 的和。当我们调用 make_incrementor(5) 时,它返回一个新的 lambda 函数对象,该对象将其参数加 5。然后我们将此新函数赋值给变量 increment_by_five()。当我们调用 increment_by_five(3) 时,它等效于调用 (lambda x: x + 5)(3)

通过从函数返回函数,我们可以在 Python 中创建更灵活和可重用的代码。无论您使用嵌套函数还是 lambda 函数,将函数作为值返回的能力都是您编程工具库中的一项强大工具。

总而言之,可以使用嵌套函数或 lambda 函数从 Python 函数返回函数,这使我们可以创建更灵活和可重用的代码。通过返回函数,我们可以抽象化函数工作方式的细节,并为用户提供更高级别的接口。

更新于:2023年8月31日

17K+ 浏览量

启动您的职业生涯

完成课程获得认证

开始学习
广告