伙计们,
下面代码的结果是[]
为什么不是 ['0','1','2']?如果我想让函数 foo 中的 psswd 等于 number,我该怎么做?
number = ['0','1','2']
def foo(psswd):
psswd = number[:]
if __name__ == '__main__':
psswd = []
foo(psswd)
print psswd
最佳答案
您的代码:
number = ['0','1','2']
def foo(psswd):
psswd = number[:]
if __name__ == '__main__':
psswd = []
foo(psswd)
print psswd
psswd = number[:]
使用新列表重新绑定(bind)局部变量 psswd
。即,当您执行
foo(psswd)
时,函数 foo
被调用,并在其中创建了指向同名全局列表的局部变量 passwd
。当您在
psswd = <something>
函数中执行 foo
时,会创建/获取此 <something>
并且使本地名称 psswd
指向它。全局变量 psswd
仍然指向旧值。如果要更改对象本身,而不是本地名称,则必须使用此对象的方法。
psswd[:] = <smething>
实际上调用了 psswd.__setitem__
方法,从而修改了本地名称 psswd
所引用的对象。关于python传递列表作为函数参数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9765843/