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中不能有指针。因此,将新对象赋值给参数变量不会改变外部范围中的值。但是您可以使用显式的getset方法处理对象。我从你那里借来了密码。有关进一步讨论,请参见

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中使用指针。因此,将新对象赋值给参数变量不会改变外部范围中的值。但是您可以使用显式的getset方法处理对象。我从你那里借来了密码。有关进一步讨论,请参见

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[:]
来避免这种情况。