您询问的代码行正在使用list comprehension创建一个列表,并将此列表中收集的数据分配给self.cells。相当于self.cells = []
for i in xrange(region.cellsPerCol):
self.cells.append(Cell(self, i))
说明:
为了最好地解释这是如何工作的,几个简单的例子可能有助于您理解您拥有的代码。如果要继续使用Python代码,您将再次遇到列表理解,您可能希望自己使用它。
注意,在下面的示例中,这两个代码段都是等价的,因为它们创建了存储在列表myList中的值的list。
例如:myList = []
for i in range(10):
myList.append(i)
相当于myList = [i for i in range(10)]
列表理解也可能更复杂,例如,如果您有一些条件确定值是否应该进入列表,那么您也可以使用列表理解来表达这一点。
此示例仅收集列表中的偶数值:myList = []
for i in range(10):
if i%2 == 0: # could be written as "if not i%2" more tersely
myList.append(i)
以及相应的列表理解:myList = [i for i in range(10) if i%2 == 0]
最后两项说明:你可以有“嵌套”列表,但它们很快变得难以理解:)
列表理解将比等价的for循环运行得更快,因此通常是关心效率的普通Python程序员的最爱。
好的,最后一个示例显示,您还可以将函数应用于列表中正在迭代的项。它使用float()将字符串列表转换为浮点值:data = ['3', '7.4', '8.2']
new_data = [float(n) for n in data]
给出:new_data
[3.0, 7.4, 8.2]