在Python中,嵌套函数模式的用例是什么?

问题描述 投票:1回答:1

虽然有很多关于嵌套函数的构造和使用的讨论,但关于嵌套函数的信息很少。 来使用它们。我想知道的是:什么时候使用嵌套函数才是习惯性的?什么时候应该使用 lambda x: <function> 在一个嵌套函数上?

Python是一门语言,它可以让你做很多你可以做的事情。不该 (即:使用 globals)。这个功能虽然可以用,但是不是不应该用?

我设想的一个使用场景是在单元测试中。比如说你一个方法是这样定义的。

def FunctionOne(varone: int, vartwo: object) -> None:
  assert varone == vartwo() 

vartwo是一个传递到函数中的函数。现在我们想对这个进行单元测试。所以我们写一个(部分)单元测试,它的样子是这样的。

def unittest() -> None:
  def test_function() -> int:
    return 1
  FuncitonOne(1, test_function)

具体内容如下:

  1. 这个函数只有在单元测试函数的范围内才需要。
  2. 该函数永远不会在其他地方被调用。

因此,总结一下:什么时候你应该(如果有的话)使用Python的嵌套函数?

python lambda inner-classes pep8
1个回答
3
投票

首先,请注意,嵌套函数提供的功能是一个 lambda 或全局函数所没有的。

  • 它可以是多语句,通过对一个 lambda
  • 通过与全局函数的对立,它可以有一个闭合。

因此,纯粹面向功能的答案是,只要需要定义一个带有闭包的多语句函数,就使用嵌套函数。

这里是这样一个函数的例子。

def create_counter(step):
    start = 0
    def count():
        print(start)
        start += step
    return count

请注意,这种用例的另一个反复出现的例子是装饰符。

def decorator(f):
    def wrapper(*args):
        ...
        f(*args)
        ...
    return wrapper

@decorator
def my_function(*args):
    ...

另一个你可能想使用嵌套函数的原因是为了使它成为 私人 在某种意义上,因为该函数将是本地的,不能全局访问。虽然,我很少看到这样做有什么用处,因为通过使用 选择合适的函数名称在你的命名空间里有帮助函数应该不会让你感到困扰。

© www.soinside.com 2019 - 2024. All rights reserved.