尝试了解如何通过嵌套函数将值分配给变量。但它不起作用。是因为当我使用a = b
时,它考虑了嵌套函数的局部变量吗?那么如何从func给变量赋值呢?
def func():
a = 0
def nested(b):
global a
a = b
nested(3)
return a
print(func())
答案 0 :(得分:4)
使用nonlocal
来访问封闭范围内的数据:
def func():
a = 0
def nested(b):
nonlocal a
a = b
nested(3)
return a
print(func()) # => 3
话虽如此,使用global
和nonlocal
关键字会破坏封装,这是一种设计反模式,几乎总是可以使用参数和return语句来避免这种情况。
答案 1 :(得分:0)
解决方案不起作用的原因是,您正在将值分配给全局范围内的a
。如果您将print(a)
放在外部函数之外(因此在全局范围内),则将获得值3
。
要获得理想的效果,您可以使用nonlocal
而不是global
,如下所示:
def func():
a = 0
def nested(b):
nonlocal a
a = b
nested(3)
return a
但是,更合适的解决方案是不要弄乱范围,而是从嵌套函数返回所需的值,然后分配它。