Generator là gì? Lý do bạn nên dùng Python Generator

0
229

Trong bài viết này, ITNavi sẽ giúp bạn tìm hiểu kỹ lưỡng hơn để xem Generator là gì cũng như lý do nên sử dụng Generator trong Python. Sự khác biệt của Generator với các hàm thông thường như thế nào. Cùng làm rõ tất cả qua các nội dung sau. 

Generator là gì?

Để một lập trình viên có thể xây dựng được iterator thì việc theo dõi các bước như: triển khai class bằng phương thức inter_()và_next_(), theo dõi những tình trạng ở bên trong, Stopiteration trong trường hợp xảy ra khi không có giá trị được trả về. 

Generator còn được dùng với mục đích giải quyết tất cả các vấn đề này. Generator là cách đơn giản được dùng để có thể tạo ra iterator. 

Bạn có thể đơn hiểu đơn giản Generator là gì như sau: Generator là một trong những hàm trả về một đối tượng (iterator) mà ở đó chúng ta có thể lặp lại (một giá trị ở một thời điểm). 

Generator là gì?

Generator là gì?

Ngoài ra, chúng cũng có nhiệm vụ tạo ra đối tượng theo kiểu danh sách, tuy nhiên bạn chỉ có thể phê duyệt nó qua những phần tử generator một lần duy nhất. Bởi vì, Generator không lưu các dữ liệu trong bộ nhớ nên khi lặp lại thì chúng sẽ tạo ra phần tử tiếp theo trong dãy rồi trả về phần tử đó. 

Bạn có nhu cầu tìm việc Python vui lòng tham khảo bài viết sau: https://itnavi.com.vn/job/python

Cách tạo Generator trong Python đơn giản

Sau khi hiểu được Generator là gì thì chắc hẳn bạn đang thắc mắc về cách tạo Generator trong Python đúng không? Câu trả lời dưới đây sẽ giải đáp cho bạn. 

Để tạo được Generator trong Python thì bạn dùng từ khó def tương tự với định nghĩa một hàm. Trong Generator, sử dụng câu lệnh yield để trả về một phần tử thay cho câu lệnh return như bình thường khác. 

Nếu các hàm có chứa ít nhất một yield thì chắc chắn đây đã là một hàm Generator. Với trường hợp này thì cả yield và return sẽ được trả về các giá trị từ ham. 

Chỉ có điều khác biệt là return sẽ chấm dứt hoàn toàn một hàm còn yield sẽ chỉ tạm dừng lại các trạng thái bên trong hàm rồi sau đó vẫn có thể tiếp tục được ngay khi gọi lần sau. 

Ví dụ dễ hiểu như sau: khi bạn gọi phương thức _next_() lần thứ nhất thì ngay sau đó Generator sẽ thực hiện các công trình tính toán giá trị rồi gặp các từ khóa yield nào nó sẽ trả ngay các phần từ trở lại vị trí đó.

Ngay khi bạn gọi phương  thức _next_() lần thứ 2 thì Generator sẽ không bắt đầu chạy tại vị trí đầu tiên mà ngay phía sau từ khóa yield thứ nhất. Cứ như vậy, thì Generator sẽ tạo ra được các phần tử trong dãy cho đến khi không thể gặp được từ khóa yield nào nữa thì sẽ thực hiện giải phóng Stoplteration. 

Cách tạo Generator trong Python khá đơn giản

Cách tạo Generator trong Python khá đơn giản

Lý do bạn nên dùng Python Generator là gì?

Tiết kiệm tối đa không gian cho bộ nhớ

Xá iterator khi không tính toán giá trị của từng mục khi khởi tạo thì chúng chỉ tính toán khi bạn yêu cầu. Quá trình này được gọi là lazy evaluation. 

 Lazy evaluation hữu ích khi người dùng có một bộ dữ liệu cực lớn để thực hiện tính toán và nó cho phép bạn có thể sử dụng dữ liệu ngay lập tức kể cả khi bộ dữ liệu đang được tính toán. 

Iterator chỉ có thể lặp lại được một lần nếu như bạn cứ cố lặp lại primes một lần nữa thì chắc chắn sẽ không có thêm bất kỳ giá trị nào được trả về và điều này tương tự như một danh sách rỗng. 

Đơn giản code nên dễ triển khai

Generator hỗ trợ cho code sẽ được triển khai dễ dàng, ngắn gọn hơn so với các lớp iterator tương tự. 

Tạo ra các list vô hạn

Generator là một trong những phương tiện rất tuyệt vời giúp bạn tạo ra các luồng dữ liệu vô hạn nhất. Và luồng dữ liệu này bạn không cần phải lưu trữ trong toàn bộ bộ nhớ bởi vì Generator chỉ có thể tạo ra một phần tử theo dạng thời điểm nên có thể biểu thị được luồng dữ liệu một cách vô hạn nhất. 

Điểm mạnh Generator mang lại

Generator function cho phép người dùng có thể tạo ra các iterator theo cách đơn giản hơn và nó giới thiệu câu lệnh yield cho Python. Ngoài ra, nó còn hoạt động như return vì nó sẽ thực hiện trả về một giá trị. 

Khi đó, Generator sẽ giúp bạn tiết kiệm được trạng thái của function và trong lần tiếp theo thì function sẽ được gọi và tiếp tục từ nơi nó dừng lại cùng với các giá trị biến mà nó đã có được trước khi yielding. 

Đây chính là khả năng mà Python mang lại cho lập trình viên. 

Tùy vào nhu cầu thực tế để đưa ra lựa chọn phù hợp nhất

Tùy vào nhu cầu thực tế để đưa ra lựa chọn phù hợp nhất

Nói tóm lại thì những ưu điểm nổi bật thuyết phục bạn nên sử dụng  Generator sẽ là: 

  • Generator cho phép bạn có thể tạo ra iterator dựa theo cách rất pythonic.
  • Iterator sẽ cho phép lazy evaluation và chỉ tạo ra element tiếp theo của một đối tượng. Khi đó, nó sẽ lặp lại khi đạt được các yêu cầu và điều này được cho là hữu ích đối với các bộ dữ liệu có kích thước lớn. 
  • Iterator và Generator thường chỉ có thể lặp lại được một lần duy nhất. 
  • Generator Function thường sẽ tốt hơn nhiều so với Iterator. 
  • Generator Expressions sẽ tốt hơn các Iterator (điều này được tính đối với các trường hợp đơn giản). 

Tổng kết

Chung quy lại thì việc sử dụng Generator còn phụ thuộc phần nhiều vào tình huống thực tế của công việc. Chính vì vậy, các lập trình viên cần có suy nghĩ cẩn trọng để đưa ra được sự lựa chọn tốt nhất cho chính mình. Và đừng quên, hãy tìm hiểu kỹ lưỡng Generator là gì trước khi sử dụng nó nhé!

LEAVE A REPLY

Please enter your comment!
Please enter your name here