cache = {}
def func():
cache['foo'] = 'bar'
print cache['foo']
输出
bar
为什么这段代码可以运行而且不需要使用global
关键字呢?
cache = {}
def func():
cache['foo'] = 'bar'
print cache['foo']
输出
bar
为什么这段代码可以运行而且不需要使用global
关键字呢?
global
关键字的初衷? - Bunny Rabbitglobal
关键字的目的是让Python编译器知道要更改哪个结构。要完全理解为什么需要这样做,需要深入了解Python的内部工作方式(locals()
与globals()
、字节码等)。这里没有违反任何规定,动态语言并不是要阻止您修改全局变量的。 :-) - Martijn Pieters
global
。 - Ashwini Chaudharymylist = ['a']
会显式地定义一个新的局部变量。请执行一次变异,例如mylist.append(10)
等。 - Ashwini Chaudharydef f1(mylist): mylist = mylist + ['a']
;在这里,我使用赋值运算符突变了列表。我有mylist = ['s']
并调用f1(mylist)
。现在,由于列表是可变的,并且您将列表对象传递给f1()
,但它仍然没有突变mylist
。 - samsamaramylist = mylist + ['a']
不是一种变异,它会创建一个全新的列表。 - Ashwini Chaudhary