【问题标题】:Difference between two variable assignments in function scope modifying global vars [duplicate]修改全局变量的函数范围中两个变量赋值之间的区别[重复]
【发布时间】:2020-02-16 12:58:24
【问题描述】:

做有什么区别:

m={}
i='a'

def change():
    m['a'] = i
    i = 'b'

这会引发属性错误:

>>> change()

UnboundLocalError: 在赋值之前引用了局部变量 'i'

还有:

m={}
i='a'

def change():
    m['a'] = i

评估没有错误。

>>> change()
>>> m
{'a': 'a'}

(最后,关于这个问题的一个问题——什么时候在问题中使用“黄色背景”合适?)

【问题讨论】:

标签: python python-3.x global globals


【解决方案1】:

这在docs中有深入解答:

这是因为当您对作用域中的变量进行赋值时,该变量将成为该作用域的本地变量,并隐藏外部作用域中任何类似命名的变量。由于 foo 中的最后一条语句为 x 分配了一个新值,因此编译器将其识别为局部变量。因此,当较早的 print(x) 尝试打印未初始化的局部变量并导致错误时。

黄色背景是一种风格,但通常用于引用某处的内容,但也可用于任何您想将该文本从主体或文本或代码中分离出来的原因。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-05
    相关资源
    最近更新 更多