[英]Python function not modifying the list passed to it
x
為什么不修改傳遞給它的列表的內容? x
確實修改傳遞給它的列表的內容? >>> def x(mylist):
... mylist = [ x for x in mylist if x > 5 ]
...
>>> foo = [1,2,3,4,5,6,7,8,9,10]
>>> x(foo)
>>> print foo
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
該函數不會修改x
因為它正在將名稱mylist
重新分配給新值。 替代方案將是令人驚訝的。
a = 1
b = a
b = 2
assert a == 1 # would you want a to be 2 here?
如果要替換內容,可以使用切片分配
def x(mylist):
mylist[:] = [ x for x in mylist if x > 5 ]
python中的賦值運算符不會進行任何方法調用。 這是名稱重新綁定的機制。 但是,您可以實現__setitem__
方法(如list
),該方法或多或少是運算符[]=
使用分片分配時,您使用一個分slice
參數調用__setitem__
,該參數說“用...替換列表的該分片”,其中...是=
的右側
正如Ryan Haining所解釋的那樣, x
正在重新分配該列表。 但是,它只能修改列表項:
def x(mylist):
for i in reversed(mylist):
if not i > 5:
mylist.remove(i)
請注意,您應該以相反的順序遍歷列表。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.