list [:] = process_list(list)在python中做了什么?

时间:2012-12-10 17:22:44

标签: python python-2.7

  

可能重复:
  What is the difference between list and list[:] in python?

我是python中的新手,所以我碰到了一个我无法找到对以下问题的回复的情况。

这在python中意味着什么?

l[:] = process_list(l)

l的类型为list

基本上我有一个全局声明的列表,我想根据process_list方法的响应修改它(用新的值覆盖旧值)。当我这样做时:

l = process_list(l)

我明白了:Unresolved reference 'l'

您能解释一下有什么不同吗?我目前使用的第一种方法是不是很好?

2 个答案:

答案 0 :(得分:4)

在函数中,对可能是局部变量的名称的赋值会按该名称创建局部变量,即使它影响全局:

a = None
def foo():
    a = 5  # local 'a' shadows global 'a'

切片分配是修改,而不是赋值,因此名称继续引用全局:

a = [1, 2, 3]
def foo():
    a[:] = [5]  # modifies global 'a'

发生Unresolved reference是因为通过创建一个遮蔽全局的局部变量,无法再看到全局变量。另一种做你想做的事情的方法是使用global

a = None
def foo():
    global a
    a = 5  # rebinds global 'a'

答案 1 :(得分:2)

list[:] = whatever将更改现有列表的内容

(而不是用list = whatever替换它)......顺便说一下list是一个可怕的变量名......