下面的代碼的結果[] 爲什麼不能[ '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