2012-12-10 75 views
2

可能重复:
What is the difference between list and list[:] in python?list [:] = process_list(list)在python中做了什么?

我在Python里是相当新的,所以我碰到了一个情况,我无法找到以下问题的响应。

这在python中意味着什么?

l[:] = process_list(l) 

l是类型list

基本上我有一个全球性的宣布名单,我想基础上,process_list方法的反应来修改它(覆盖用新的旧值)。当我尝试这样的:

l = process_list(l) 

我得到这样的:Unresolved reference 'l'

能否请您解释一下什么区别,如果我使用目前第一种方法是一个很好的?

+0

难道真的叫列表?列表是一个内置的类型,你不应该调用一个变量“列表” –

+0

@DiegoBasch:没有不叫“列表”,但我想保持它简单明了,我忘了python有这种内置类型。 –

回答

4

在功能,分配一个名称可能是一个局部变量会创建一个同名的局部变量,即使它隐藏了全球:

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

片分配的修改,不分配,故得名continu ES指全球:

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' 
+0

非常感谢你对这个清晰而简单的解释! –

+0

你能帮我什么吗?我试图将这个列表(全局声明)分配给一个字典。直到程序中的一点,我用它作为列表,但现在我想将它作为字典。什么应该是最好的方式来做到这一点?谢谢! –

+1

@andreea.sandu使用'global a',然后你可以写'a = {}'。 – ecatmur

2

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

(而不是与list = whatever取代它)...顺便说list是一个可怕的变量名...

+0

你是对的名称,但在我的代码是不是这样的。我忘了python有这个内置类型。 –