Python 中嵌套函数模式的用例是什么?
What is the use-case for a nested function pattern in Python?
虽然围绕嵌套函数的构造和使用进行了大量讨论,但关于何时使用它们的信息却很少。我想知道的是:什么时候使用嵌套函数是惯用的?什么时候应该在嵌套函数上使用 lambda x: <function>
?
Python 是一种语言,可以让您做很多 不应该 的事情(即:使用全局变量)。这是一个虽然可以使用但不应该使用的功能吗?
我设想的一个场景是单元测试。假设您定义了这样一个方法:
def FunctionOne(varone: int, vartwo: object) -> None:
assert varone == vartwo()
vartwo是传入函数的函数。现在我们要对此进行单元测试。所以我们编写了一个(部分)单元测试,如下所示:
def unittest() -> None:
def test_function() -> int:
return 1
FuncitonOne(1, test_function)
这里的具体情况是:
- 仅在单元测试功能范围内需要该功能。
- 该函数从未在别处调用。
因此,总结一下:您什么时候应该(如果有的话)将嵌套函数与 Python 一起使用?
首先,请注意嵌套函数提供了 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):
...
您可能想要使用嵌套函数的另一个原因是在某种意义上使其成为 private,因为该函数将是本地的,无法全局访问。虽然,自从 以来,我很少看到它有用的情况,但在你的命名空间中使用辅助函数应该不会打扰你。
虽然围绕嵌套函数的构造和使用进行了大量讨论,但关于何时使用它们的信息却很少。我想知道的是:什么时候使用嵌套函数是惯用的?什么时候应该在嵌套函数上使用 lambda x: <function>
?
Python 是一种语言,可以让您做很多 不应该 的事情(即:使用全局变量)。这是一个虽然可以使用但不应该使用的功能吗?
我设想的一个场景是单元测试。假设您定义了这样一个方法:
def FunctionOne(varone: int, vartwo: object) -> None:
assert varone == vartwo()
vartwo是传入函数的函数。现在我们要对此进行单元测试。所以我们编写了一个(部分)单元测试,如下所示:
def unittest() -> None:
def test_function() -> int:
return 1
FuncitonOne(1, test_function)
这里的具体情况是:
- 仅在单元测试功能范围内需要该功能。
- 该函数从未在别处调用。
因此,总结一下:您什么时候应该(如果有的话)将嵌套函数与 Python 一起使用?
首先,请注意嵌套函数提供了 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):
...
您可能想要使用嵌套函数的另一个原因是在某种意义上使其成为 private,因为该函数将是本地的,无法全局访问。虽然,自从