下面的代码的结果[] 为什么不能[ '0', '1', '2']?如果我想让psswd等于函数foo中的数字,我该怎么办?
number = ['0','1','2']
def foo(psswd):
psswd = number[:]
if __name__ == '__main__':
psswd = []
foo(psswd)
print psswd
下面的代码的结果[] 为什么不能[ '0', '1', '2']?如果我想让psswd等于函数foo中的数字,我该怎么办?
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[:]
重新绑定本地变量psswd
一个新的列表。
也就是说,当你做foo(psswd)
时,函数foo
被调用,并且它内部的局部变量passwd
被创建,它指向同名的全局列表。
当你psswd = <something>
内foo
功能,创建此<something>
/得到和本地名称psswd
由指向它。全局变量psswd
仍指向旧值。
如果要更改对象本身,而不是本地名称,则必须使用此对象的方法。 psswd[:] = <smething>
实际上调用psswd.__setitem__
方法,因此修改了由本地名称psswd
引用的对象。
您需要发生变异,而不是重新绑定,与slice-assigning。
psswd[:] = number[:]
number = ['0','1','2']
def foo(psswd):
psswd[:] = number # swap the slice around here
if __name__ == '__main__':
psswd = []
foo(psswd)
print psswd