2016-10-10 230 views
-1

完全理解我开始了一个小的代码示例马上:for循环蟒蛇

def foo(): 
    return 0 

a = [1, 2, 3] 

for el in a: 
    el = foo() 

print(a) # [1, 2, 3] 

我想知道是什么EL在这种情况下。由于a保持不变,我直言,el是一个int的引用。但重新分配后,el指向一个新的int对象,它与列表a无关。

请告诉我,如果我理解正确。此外,你如何解决这个pythonic-ly?是枚举()正确调用作为

for i, el in enumerate(a): 
    a[i] = foo() 

工作正常。

回答

1

是的,你理解正确。 for将目标变量el设置为指向a中的每个元素。 el = foo()确实会更新该名称以指向另一个不相关的整数。

使用enumerate()是取代a中的参考文件的好方法。

在这种情况下,您可能会发现Ned Batchelder的Facts and myths about Python names and values article有帮助。

另一种方法是完全创建一个新的列表对象,并重新绑定a以指向该列表。你可以用列表理解建立这样的列表:

a = [foo() for el in a]