Python 函数作用域中两个变量赋值之间的差异修改全局变量

Python 函数作用域中两个变量赋值之间的差异修改全局变量,python,python-3.x,global,globals,Python,Python 3.x,Global,Globals,这样做的区别是什么: m={} i='a' def change(): m['a'] = i i = 'b' 这会引发属性错误: UnboundLocalError:赋值前引用的局部变量“i” 以及: 它的计算结果没有错误 (最后,关于这个问题的一个问题——什么时候在问题中使用“黄色背景”合适?这在以下章节中得到了深入的回答: 这是因为当您对作用域中的变量进行赋值时,该变量将成为该作用域的局部变量,并在外部作用域中隐藏任何类似命名的变量。由于foo中的最后一条语句为x赋值,编

这样做的区别是什么:

m={}
i='a'

def change():
    m['a'] = i
    i = 'b'
这会引发属性错误:

UnboundLocalError:赋值前引用的局部变量“i”

以及:

它的计算结果没有错误


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

这在以下章节中得到了深入的回答:

这是因为当您对作用域中的变量进行赋值时,该变量将成为该作用域的局部变量,并在外部作用域中隐藏任何类似命名的变量。由于foo中的最后一条语句为x赋值,编译器将其识别为局部变量。因此,当前面的print(x)尝试打印未初始化的局部变量时,会出现错误

黄色背景是一种风格,但通常用于引语,但也可以用于任何你想将文本从主体或文本或代码中分离出来的原因

>>> change()
m={}
i='a'

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