Page 79 - Python Simple
P. 79

9. Lớp                                                          http://www.vithon.org/tutorial/2.5/node11.html



             và hợp nhất Python. Đằng sau màn nhung, câu lệnh for gọi iter() trên đối tượng
             chứa. Hàm này trả về một đối tượng bộ lặp có định nghĩa phương thức next() để truy
             xuất và các phần tử trong bộ chứa (container). Khi không còn phần tử nào, next()
             nâng biệt lệ StopIteration để yêu cầu vòng lặp for kết thúc. Ví dụ sau cho thấy cách
             hoạt động:

                 >>> s = 'abc'
                 >>> it = iter(s)
                 >>> it
                 <iterator object at 0x00A1DB50>
                 >>> it.next()
                 'a'
                 >>> it.next()
                 'b'
                 >>> it.next()
                 'c'
                 >>> it.next()

                 Traceback (most recent call last):
                   File "<stdin>", line 1, in ?
                     it.next()
                 StopIteration

             Chúng ta đã hiểu giao thức bộ lặp, nên chúng ta có thể thêm cách thức bộ lặp
             (iterator behavior) vào lớp của chúng ta một cách dễ dàng. Định nghĩa một phương
             thức __iter__() trả về một đối tượng với một phương thức next() . Nếu lớp có định
             nghĩa next(), thì __iter__() chỉ cần trả về self:

                 class Reverse:
                     "Iterator for looping over a sequence backwards"
                     def __init__(self, data):
                         self.data = data
                         self.index = len(data)
                     def __iter__(self):
                         return self
                     def next(self):
                         if self.index == 0:
                             raise StopIteration
                         self.index = self.index - 1
                         return self.data[self.index]


                 >>> for char in Reverse('spam'):
                 ...     print char
                 ...
                 m
                 a
                 p
                 s


             9.10 Bộ tạo


             Bộ sinh (generator) là một công cụ đơn giản và mạnh mẽ để tạo các bộ lặp. Chúng
             được viết như những hàm thông thường nhưng dùng câu lệnh yield khi nào chúng
             muốn trả về dữ liệu. Mỗi lần next() được gọi, bộ sinh trở lại nơi nó đã thoát ra (nó nhớ



     11 of 13                                                                                 08/31/2011 10:27 AM
   74   75   76   77   78   79   80   81   82   83   84