【发布时间】:2012-12-14 09:57:59
【问题描述】:
cache = {}
def func():
cache['foo'] = 'bar'
print cache['foo']
输出
bar
为什么这有效,为什么不需要使用 global 关键字?
【问题讨论】:
-
global不是可变对象所必需的。 -
@AshwiniChaudhary 关心添加参考?
-
@AshwiniChaudhary 这根本不是真的。用列表试试这个,它不会工作,列表和可变的! mylist = [] def f1(): mylist = ['a'];如果你在 f1() 之外打印 mylist 仍然是空的
-
@samsamara 这不是我的意思,
mylist = ['a']你明确定义了一个新的局部变量。改为执行突变,例如mylist.append(10)等 -
是的,如果你做这样的突变,它会起作用,因为你只是在访问它。但是如果我改变我的函数来接受一个列表作为参数,
def f1(mylist): mylist = mylist + ['a'];我正在使用赋值运算符改变列表。我有mylist = ['s'],我打电话给f1(mylist)。现在由于列表是可变的,并且您将列表对象传递给f1(),但它仍然没有变异mylist。