2012-03-19 97 views
3

人,蟒通列表作为函数参数

下面的代码的结果[] 为什么不能[ '0', '1', '2']?如果我想让psswd等于函数foo中的数字,我该怎么办?

number = ['0','1','2'] 
def foo(psswd): 
    psswd = number[:] 

if __name__ == '__main__': 
    psswd = [] 
    foo(psswd) 
    print psswd 

回答

1

您的代码:

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引用的对象。

12

您需要发生变异,而不是重新绑定,与slice-assigning

psswd[:] = number[:] 
6
number = ['0','1','2'] 
def foo(psswd): 
    psswd[:] = number # swap the slice around here 

if __name__ == '__main__': 
    psswd = [] 
    foo(psswd) 
    print psswd