如何从嵌套函数为变量赋值

时间:2019-04-21 20:42:35

标签: python python-3.x

尝试了解如何通过嵌套函数将值分配给变量。但它不起作用。是因为当我使用a = b时,它考虑了嵌套函数的局部变量吗?那么如何从func给变量赋值呢?

def func():
    a = 0
    def nested(b):
        global a
        a = b
    nested(3)
    return a
print(func())

2 个答案:

答案 0 :(得分:4)

使用nonlocal来访问封闭范围内的数据:

def func():
    a = 0
    def nested(b):
        nonlocal a
        a = b
    nested(3)
    return a
print(func()) # => 3

话虽如此,使用globalnonlocal关键字会破坏封装,这是一种设计反模式,几乎总是可以使用参数和return语句来避免这种情况。

答案 1 :(得分:0)

解决方案不起作用的原因是,您正在将值分配给全局范围内的a。如果您将print(a)放在外部函数之外(因此在全局范围内),则将获得值3

要获得理想的效果,您可以使用nonlocal而不是global,如下所示:

def func():
    a = 0
    def nested(b):
        nonlocal a
        a = b
    nested(3)
    return a

但是,更合适的解决方案是不要弄乱范围,而是从嵌套函数返回所需的值,然后分配它。