尽管围绕嵌套函数的构造和使用进行了很多讨论,但是有关何时使用它们的信息很少。我想找出的是:什么时候使用嵌套函数是惯用的?什么时候应该使用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中使用嵌套函数?
首先,请注意,嵌套函数提供了alambda
或global函数没有的功能。
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):
...
您可能要使用嵌套函数的另一个原因是在某种意义上将其设为私有,因为该函数将是本地的,无法全局访问。虽然,我很少看到这种用法有用,因为通过选择适当的函数名称,它不应打扰您在命名空间中使用辅助函数。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句