我只是不明白,我们从来没有在内部函数中定义参数b,但是为什么内部函数接受a+b而没有错误呢?
def test(a):
def add(b):
nonlocal a
a += 1
return a+b
return add
func = test(4)
print(func(4))上面的函数来自这里:https://www.w3resource.com/python-exercises/python-functions-exercise-19.php
发布于 2021-10-16 16:40:45
下面是这个函数中发生的事情:
test(),这是一个闭包工厂函数。这意味着每次调用它都会创建一个新的闭包,然后将闭包返回给调用者。add(),这是一个内部函数,它接受单个参数,并返回add()表达式的结果6返回add()作为函数对象,而不调用它。
现在的问题是add()从哪里得到a的值?这就是闭包发挥作用的地方。add()从外部函数test()获取a的值。当您在第9行调用test()时,Python将执行以下操作:
add()的新实例,该实例采用单个变量基。add()的周围状态进行快照,其中包括a及其当前值(在第9行中,您正在将其定义为add()及其整个周围状态。这样,当您在第10行调用由test()返回的add()实例时,您将看到该函数记住了a的值!因此,您得到的是先前分配给a = 4的值(第9行)和新传递的参数- b = 4的值(第10行)。
希望这有助于澄清!
发布于 2021-10-16 16:53:20
它是如何编写的,是访问函数中定义的函数的典型方式。这是通过在调用main函数时返回所需函数来实现的。例如:下面的代码中定义了两个函数TEST(),其中一个函数被调用:
def test(a):
def times(b):
nonlocal a
return a*b
def add(b):
nonlocal a
a += 1
return a+b
return times
func = test(4) print(func(4))在本例中,输出为16。
发布于 2021-10-16 16:20:32
您将在此调用中传递b:func(4)。
需要说明的是,func就是add。
https://stackoverflow.com/questions/69597375
复制相似问题