Python 替换作为参数传递的列表的内容
我正在尝试编写这样的代码:Python 替换作为参数传递的列表的内容,python,Python,我正在尝试编写这样的代码: the_list = ['some list', 0, 1, 2] def change(l): x = ['some other list', 3, 4, 5] l <- x change(the_list) print(the_list) # ['some other list', 3, 4, 5] the_list=['some list',0,1,2] def更改(l): x=['一些其他列表',3,4,5] l您可以执行以下
the_list = ['some list', 0, 1, 2]
def change(l):
x = ['some other list', 3, 4, 5]
l <- x
change(the_list)
print(the_list) # ['some other list', 3, 4, 5]
the_list=['some list',0,1,2]
def更改(l):
x=['一些其他列表',3,4,5]
l您可以执行以下操作来替换函数change
中的l
内容:
def change(l):
x = ['some other list', 3, 4, 5]
l[:] = x
这将用给定iterable的内容替换切片范围(在本例中为整个列表)。您可以执行以下操作来替换函数change
中l
的内容:
def change(l):
x = ['some other list', 3, 4, 5]
l[:] = x
这将用给定iterable的内容替换切片范围(在本例中是整个列表)。这里的问题是Python中不能有指针。因此,将新对象赋值给参数变量不会改变外部范围中的值。但是您可以使用显式的get和set方法处理对象。我从你那里借来了密码。有关进一步讨论,请参见
class ref:
def __init__(self, obj): self.obj = obj
def get(self): return self.obj
def set(self, obj): self.obj = obj
def change(l):
x = ['some other list', 3, 4, 5]
l.set(x)
the_list=ref(['some list', 0, 1, 2])
change(the_list)
print(the_list.get())
因为您可以通过l[:]=x显式设置列表,正如在niemmi答案中提到的,您也可以这样做。这里的问题是,您不能在Python中使用指针。因此,将新对象赋值给参数变量不会改变外部范围中的值。但是您可以使用显式的get和set方法处理对象。我从你那里借来了密码。有关进一步讨论,请参见
class ref:
def __init__(self, obj): self.obj = obj
def get(self): return self.obj
def set(self, obj): self.obj = obj
def change(l):
x = ['some other list', 3, 4, 5]
l.set(x)
the_list=ref(['some list', 0, 1, 2])
change(the_list)
print(the_list.get())
由于您可以通过l[:]=x显式设置列表,如niemmi答案中所述,您也可以这样做。函数应该已经可以访问外部作用域,因为python将在本地查找,然后在作用域中向上移动,直到找到变量名或错误
所以你应该能够做到这一点
the_list = ['some list', 0, 1, 2]
def change():
x = ['some other list', 3, 4, 5]
for item in x:
the_list.append(item)
change()
print(the_list)
增加产量
['some list', 0, 1, 2, 'some other list', 3, 4, 5]
函数应该已经可以访问外部作用域,因为python将在本地查找,然后在作用域中向上移动,直到找到变量名或错误
所以你应该能够做到这一点
the_list = ['some list', 0, 1, 2]
def change():
x = ['some other list', 3, 4, 5]
for item in x:
the_list.append(item)
change()
print(the_list)
增加产量
['some list', 0, 1, 2, 'some other list', 3, 4, 5]
我试图避开附属物,因为它们是性能怪物。另外,它是关于覆盖列表的内容,而不是附加。如果你愿意,你可以避免附加,关键是外部范围可以根据你的意愿使用,你可以使用它,它将在全局范围内更改。我试图避免附加,因为它们是性能怪物。另外,它是关于覆盖列表的内容,而不是附加。如果您愿意,可以避免附加,关键是外部作用域可供您随意使用,您可以使用它,它将在全局范围内更改。请注意别名。如果您有list1=['some list']
和list2=list1
,运行change(list1)
将同时更改list1
和list2
。您可以通过设置list2=list1[:]
来避免这种情况。只需小心使用别名。如果您有list1=['some list']
和list2=list1
,运行change(list1)
将同时更改list1
和list2
。您可以通过设置list2=list1[:]
来避免这种情况。