Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Python

Generator có thể dùng để tạo iterator trong Python không?

Có, chúng ta có thể tạo generator bằng cách sử dụng từ khóa yield trong Python. Generator là cách dễ dàng và đơn giản để tạo iterator, chủ yếu dùng để khai báo một hàm hoạt động như một iterator.

Generator là gì?

Generator là một hàm cho phép lặp qua từng giá trị một lần. Trong lập trình hàng ngày, mọi lập trình viên đều sử dụng các đối tượng có thể lặp như list, string, dict, v.v. Iterator là đối tượng có thể lặp qua vòng lặp.

Ví dụ cơ bản về Generator

def generator():
    print("Chương trình chạy thành công")
    yield 'x'
    yield 'y'
    yield 'z'

generator()

Kết quả

<generator object generator at 0x000000CF81D07390>

Khi gọi hàm generator, nó trả về một generator object chứ không thực thi code ngay. Để lấy giá trị, ta dùng vòng lặp for:

Sử dụng vòng lặp for

for i in generator():
    print(i)

Kết quả

Chương trình chạy thành công
x
y
z

Iterator và các phương thức __iter__ , __next__

Đối tượng iterator hỗ trợ hai phương thức:

  1. __iter__: Trả về chính đối tượng iterator, dùng cho vòng lặp và câu lệnh in.
  2. __next__: Trả về giá trị tiếp theo; nếu không còn phần tử thì ném ra ngoại lệ StopIteration.

Ví dụ tạo Iterator tùy chỉnh

class Function:
    def __init__(self, low, high):
        self.current = low
        self.high = high
    
    def __iter__(self):
        return self
    
    def __next__(self):
        if self.current > self.high:
            raise StopIteration
        else:
            self.current += 1
            return self.current - 1

c = Function(3, 20)
for i in c:
    print(i, end=' ')

Kết quả

3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20

Tóm lại: Generator là cách ngắn gọn để tạo iterator nhờ từ khóa yield, tự động xử lý __iter__ và __next__ cũng như ngoại lệ StopIteration.