该函数不会修改,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
),这或多或少是运算符[]=
使用切片赋值,您将__setitem__
使用一个slice
参数调用"将此列表替换为...",其中...是右侧的=
该函数不会修改,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
),这或多或少是运算符[]=
使用切片赋值,您将__setitem__
使用一个slice
参数调用"将此列表替换为...",其中...是右侧的=