Dòng mã bạn đang hỏi đang sử dụng list comprehension để tạo danh sách và gán dữ liệu được thu thập trong danh sách này vào self.cells
. Nó tương đương với
self.cells = []
for i in xrange(region.cellsPerCol):
self.cells.append(Cell(self, i))
Giải thích:
Để giải thích tốt nhất cách công trình này, một vài ví dụ đơn giản có thể là bài học trong việc giúp bạn hiểu mã mà bạn có. Nếu bạn sẽ tiếp tục làm việc với mã Python, bạn sẽ bắt gặp lại việc hiểu danh sách và bạn có thể muốn sử dụng nó. Lưu ý, trong ví dụ bên dưới, cả hai đoạn mã là tương đương ở chỗ chúng tạo ra một giá trị list
được lưu trữ trong danh sách myList
.
Ví dụ:
myList = []
for i in range(10):
myList.append(i)
tương đương với
Danh sách
myList = [i for i in range(10)]
comprehensions có thể phức tạp hơn quá, vì vậy ví dụ nếu bạn đã có một số điều kiện xác định nếu giá trị nên đi vào một danh sách bạn cũng có thể thể hiện điều này bằng cách hiểu danh sách.
Ví dụ này chỉ thu thập các giá trị chẵn trong danh sách:
myList = []
for i in range(10):
if i%2 == 0: # could be written as "if not i%2" more tersely
myList.append(i)
và danh sách hiểu tương đương:
myList = [i for i in range(10) if i%2 == 0]
Hai lưu ý cuối cùng:
- Bạn có thể đã "lồng nhau "liệt kê các sự hiểu biết, nhưng chúng nhanh chóng trở nên khó hiểu :)
- Danh sách hiểu sẽ chạy nhanh hơn so với tương đương cho vòng lặp, và do đó thường là một yêu thích với các lập trình viên Python thường xuyên, những người quan tâm về hiệu quả.
Ok, một ví dụ cuối cùng cho thấy bạn cũng có thể áp dụng các chức năng cho các mục bạn đang lặp trong danh sách.Này sử dụng float() để chuyển đổi một danh sách các chuỗi giá trị nổi:
data = ['3', '7.4', '8.2']
new_data = [float(n) for n in data]
cho:
new_data
[3.0, 7.4, 8.2]
nó được gọi là một 'danh sách hiểu biết' –