CÔNG CỤ
MODULES
THAM KHẢO
CÁC CHỦ ĐỀ
BÀI MỚI NHẤT
MỚI CẬP NHẬT

Thông báo: Download 4 khóa học Python từ cơ bản đến nâng cao tại đây.

Biểu thức Generator trong Python

Trong bài viết này, bạn sẽ học về biểu thức generator trong Python, một cách tiếp cận mạnh mẽ và hiệu quả để tạo ra các đối tượng generator. Biểu thức generator giúp bạn viết mã ngắn gọn, dễ đọc và tiết kiệm bộ nhớ hơn so với các phương pháp truyền thống như list comprehension. Hãy cùng tìm hiểu cách sử dụng biểu thức generator để cải thiện hiệu suất và tính linh hoạt trong các chương trình Python của bạn.

test php

banquyen png
Bài viết này được đăng tại freetuts.net, không được copy dưới mọi hình thức.

Giới thiệu về biểu thức generator trong Python

Biểu thức generator là một biểu thức trả về một đối tượng generator.

Về cơ bản, một hàm generator là một hàm chứa câu lệnh yield và trả về một đối tượng generator.

Ví dụ, hàm sau đây định nghĩa một hàm generator:

Bài viết này được đăng tại [free tuts .net]

def squares(length):
    for n in range(length):
        yield n ** 2

Hàm generator squares trả về một đối tượng generator sản sinh ra các số bình phương của các số nguyên từ 0 đến length - 1.

Bởi vì một đối tượng generator là một iterator, bạn có thể sử dụng vòng lặp for để lặp qua các phần tử của nó:

for square in squares(5):
    print(square)

Kết quả:

0
1
4
9
16

Một biểu thức generator cung cấp cho bạn một cách đơn giản hơn để trả về một đối tượng generator.

Ví dụ sau đây định nghĩa một biểu thức generator trả về các số bình phương của các số nguyên từ 0 đến 4:

squares = (n ** 2 for n in range(5))

squares là một đối tượng generator, bạn có thể lặp qua các phần tử của nó như sau:

for square in squares:
    print(square)

Như bạn thấy, thay vì sử dụng một hàm để định nghĩa một hàm generator, bạn có thể sử dụng một biểu thức generator.

Biểu thức generator giống như list comprehension về cú pháp. Ví dụ, một biểu thức generator cũng hỗ trợ các cú pháp phức tạp bao gồm:

  • Câu lệnh if
  • Vòng lặp lồng nhau
  • Comprehensions lồng nhau

Tuy nhiên, một biểu thức generator sử dụng dấu ngoặc tròn () thay vì dấu ngoặc vuông [].

Biểu thức generator vs list comprehension trong Python

Dưới đây là cách sử dụng list comprehension để tạo ra các số bình phương từ 0 đến 4:

square_list = [n ** 2 for n in range(5)]

Và đây là cách định nghĩa một generator số bình phương:

square_generator = (n ** 2 for n in range(5))

Cú pháp

Về cú pháp, biểu thức generator sử dụng dấu ngoặc tròn () trong khi list comprehension sử dụng dấu ngoặc vuông [].

Sử dụng bộ nhớ

List comprehension trả về một danh sách trong khi biểu thức generator trả về một đối tượng generator.

Điều này có nghĩa là list comprehension trả về một danh sách đầy đủ các phần tử ngay lập tức. Tuy nhiên, biểu thức generator trả về các phần tử lần lượt, khi được yêu cầu.

List comprehension hoạt động theo cơ chế eager (háo hức) trong khi biểu thức generator hoạt động theo cơ chế lazy (lười biếng).

Nói cách khác, list comprehension tạo ra tất cả các phần tử ngay lập tức và tải tất cả vào bộ nhớ.

Ngược lại, biểu thức generator tạo ra từng phần tử một khi được yêu cầu và chỉ tải một phần tử duy nhất vào bộ nhớ.

Iterable vs iterator

List comprehension trả về một iterable. Điều này có nghĩa là bạn có thể lặp qua kết quả của list comprehension nhiều lần.

Tuy nhiên, biểu thức generator trả về một iterator, cụ thể là một lazy iterator. Nó sẽ trở nên cạn kiệt khi bạn lặp qua hết các phần tử của nó.

Kết bài

Sử dụng biểu thức generator trong Python là một cách hiệu quả và tiện lợi để tạo ra các generator. Biểu thức này không chỉ giúp tiết kiệm bộ nhớ mà còn làm cho mã nguồn trở nên ngắn gọn và dễ đọc hơn. Bằng cách sử dụng biểu thức generator, bạn có thể tạo ra các dãy số và xử lý chúng theo cách "lười biếng", tức là chỉ tính toán giá trị khi cần thiết. Điều này đặc biệt hữu ích khi làm việc với các dãy số lớn hoặc vô hạn. Hãy áp dụng biểu thức generator vào các dự án của bạn để tận dụng tối đa lợi ích mà chúng mang lại.

Cùng chuyên mục:

10 tip One Liner bạn cần biết trong Python

10 tip One Liner bạn cần biết trong Python

Cách gỡ lỗi ứng dụng Python trong Docker Container bằng VS Code

Cách gỡ lỗi ứng dụng Python trong Docker Container bằng VS Code

Cách đảo ngược Chuỗi String trong Python

Cách đảo ngược Chuỗi String trong Python

6 Tip viết vòng lặp For hiệu quả hơn trong Python

6 Tip viết vòng lặp For hiệu quả hơn trong Python

Các nền tảng lưu trữ tốt nhất cho ứng dụng và script Python

Các nền tảng lưu trữ tốt nhất cho ứng dụng và script Python

Cách tạo hằng số trong Python

Cách tạo hằng số trong Python

Cách lên lịch chạy script Python bằng GitHub Actions

Cách lên lịch chạy script Python bằng GitHub Actions

Cách sắp xếp dictionary theo giá trị trong Python

Cách sắp xếp dictionary theo giá trị trong Python

Cách kiểm tra List trống trong Python

Cách kiểm tra List trống trong Python

Cách sao chép danh sách (List) trong Python

Cách sao chép danh sách (List) trong Python

Cách đo Time chạy trong Python

Cách đo Time chạy trong Python

Cách làm việc với Notion API trong Python

Cách làm việc với Notion API trong Python

Cách background của hình ảnh trong Python

Cách background của hình ảnh trong Python

Cách tự viết Context Manager trong Python

Cách tự viết Context Manager trong Python

Hướng dẫn sử dụng LangChain bằng Python

Hướng dẫn sử dụng LangChain bằng Python

Hướng dẫn chuyển đổi file Google Colab sang Markdown trong Python

Hướng dẫn chuyển đổi file Google Colab sang Markdown trong Python

Cách xóa một khóa (key) ra khỏi dictionary trong Python

Cách xóa một khóa (key) ra khỏi dictionary trong Python

Cách chia List thành các phần bằng nhau trong Python

Cách chia List thành các phần bằng nhau trong Python

Sử dụng câu lệnh raise from trong Python

Sử dụng câu lệnh raise from trong Python

Ngoại lệ tùy chỉnh trong Python

Ngoại lệ tùy chỉnh trong Python

Top