Python 带字典的变量作用域
执行时不会出错:Python 带字典的变量作用域,python,Python,执行时不会出错: def myfunction(): global a_dict a_dict['s'] = 'whatevs' b_dict['s'] = 'lalala' a_dict = b_dict a_dict = {'s':[], 'm':[]} b_dict = {'s':[], 'm':[]} myfunction() 为什么在不向函数中添加global b_dict的情况下不会抛出错误?因为我正在编写这两个词典 如果我注释掉global a_
def myfunction():
global a_dict
a_dict['s'] = 'whatevs'
b_dict['s'] = 'lalala'
a_dict = b_dict
a_dict = {'s':[], 'm':[]}
b_dict = {'s':[], 'm':[]}
myfunction()
为什么在不向函数中添加global b_dict
的情况下不会抛出错误?因为我正在编写这两个词典
如果我注释掉
global a_dict
(“'a_dict'在赋值之前被引用”)——这当然是正确的-正如我所预料的那样。在函数中将变量声明为全局变量的事实允许您在该函数之外使用变量。如果其中没有声明变量b,Python将假定它是在函数调用之前声明的全局变量。当您想要分配给全局名称foo
时,您只需要global foo
。您没有分配给b_dict
;您正在分配给它的一个键,相当于b_dict.\uuuu setitem_uuu('s','lalala')
。b_dict
的两种用法都将其视为自由变量,因为没有定义名为b_dict
的局部变量
自由变量的值取自定义它的最近封闭范围(在本例中为全局范围)。正确拼写“I”可以减少被否决的机会。