您询问的代码行是使用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]