【问题标题】:Variable scope in Python nested function [duplicate]Python嵌套函数中的变量范围[重复]
【发布时间】:2016-09-25 05:08:24
【问题描述】:

第一个代码 sn -p 打印出[0, 3]

def func():
    a = [0]

    def swim():
        a.append(3)
        # a = [1]+a
        return a
    return swim()

print(func())

第二个代码 sn-p 引发错误“UnboundLocalError: local variable 'a' referenced before assignment”

def func():
    a = [0]

    def swim():
        # a.append(3)
        a = [1]+a
        return a
    return swim()

print(func())

a 是否可见/可访问swim 功能?

【问题讨论】:

  • @Pythonista 谢谢!只要有赋值,'a' 似乎就变成了一个局部变量。

标签: python function python-3.x scope global-variables


【解决方案1】:

这似乎是this link 中所述的常见问题。原因是swim 中的变量a 在分配给a 后立即成为局部变量。它遮蔽了外部a,并且本地a在函数swim赋值之前没有定义,所以错误上升。

感谢大家的回答!

【讨论】:

    【解决方案2】:

    当您在一个范围内执行诸如a = [1] + aa += [1] 之类的赋值时,该变量将成为该范围内的本地变量。在你的情况下,这是函数swim()

    【讨论】:

      【解决方案3】:

      您在第一个代码中附加了一个元素。 aid 还是一样的。

      但在第二个代码中,您正在重新定义变量 a,这将更改该变量的 id。这样你就可以得到UnboundLocalError

      【讨论】:

        猜你喜欢
        • 2011-07-10
        • 1970-01-01
        • 2019-08-21
        • 2013-05-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-07-02
        • 1970-01-01
        相关资源
        最近更新 更多