【问题标题】:How to assign value to a variable from nested function [duplicate]如何从嵌套函数为变量赋值[重复]
【发布时间】:2019-04-21 20:42:35
【问题描述】:

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

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

【问题讨论】:

  • 理想情况下,从嵌套函数返回并赋值。如果不需要,不要乱用范围。
  • 使用nonlocal 而不是global,也就是说我同意@ParitoshSingh 的观点,除非你正在使用装饰器之类的东西,否则你不应该返回值。

标签: python python-3.x


【解决方案1】:

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

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

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

【讨论】:

  • 我一直在思考为什么 global 是错误的,并且在将其交换到 nonlocal 时完全空白。肯定是更好的答案。
【解决方案2】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 2013-03-31
    • 1970-01-01
    • 2021-07-11
    • 2015-03-21
    • 2021-05-30
    • 1970-01-01
    • 2016-03-27
    • 2018-06-06
    • 2020-01-11
    相关资源
    最近更新 更多