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

Hộp Công Cụ Python

Hugo Bowne-Anderson

Data Scientist at DataCamp

Biểu thức generator

  • Nhắc lại list comprehension
[2 * num for num in range(10)]
[0, 2, 4, 6, 8, 10, 12, 14, 16, 18]
  • Dùng ( ) thay cho [ ]
(2 * num for num in range(10))
<generator object <genexpr> at 0x1046bf888>
Hộp Công Cụ Python

List comprehension vs. generator

  • List comprehension - trả về một list
  • Generator - trả về một đối tượng generator
  • Cả hai đều có thể lặp qua
Hộp Công Cụ Python

In giá trị từ generator (1)

result = (num for num in range(6))

for num in result: print(num)
0
1
2
3
4
5
result = (num for num in range(6))

print(list(result))
[0, 1, 2, 3, 4, 5]
Hộp Công Cụ Python

In giá trị từ generator (2)

result = (num for num in range(6))
  • Đánh giá lười (lazy evaluation)
print(next(result))
0
print(next(result))
1
print(next(result))
2
print(next(result))
3
print(next(result))
4
Hộp Công Cụ Python

Generator vs. list comprehension

Hộp Công Cụ Python

Generator vs. list comprehension

Hộp Công Cụ Python

Generator vs. list comprehension

Hộp Công Cụ Python

Điều kiện trong biểu thức generator

even_nums = (num for num in range(10) if num % 2 == 0)

print(list(even_nums))
[0, 2, 4, 6, 8]
Hộp Công Cụ Python

Hàm generator

  • Tạo đối tượng generator khi được gọi
  • Định nghĩa như hàm bình thường - def
  • Yield một dãy giá trị thay vì trả về một giá trị
  • Tạo giá trị với từ khóa yield
Hộp Công Cụ Python

Tạo một hàm generator

  • sequence.py
def num_sequence(n):
    """Sinh giá trị từ 0 đến n."""
    i = 0
    while i < n:
        yield i
        i += 1
Hộp Công Cụ Python

Dùng hàm generator

result = num_sequence(5)

print(type(result))
<class 'generator'>
for item in result:
    print(item)
0
1
2
3
4
Hộp Công Cụ Python

Hãy thực hành!

Hộp Công Cụ Python

Preparing Video For Download...