Функція-генератор (ключове слово yield) в Python

У своїй роботі я часто використовую цикл for для ітерації по даних. Іноді список може бути малим, а іноді дуже великим. У моєму керованому середовищі Spark, яке має обмежену пам'ять драйвера, я зіткнувся з помилкою через недостатню пам'ять. Я виявив, що використання функції-генератора допомогло вирішити цю проблему.

Функція-генератор з ключовим словом yield генерує значення по одному, замість того, щоб зберігати їх усі в пам'яті.

# Функція-генератор  
def generator_function(n):  
 for i in range(n):  
 print("generator_function генерує ", i)  
 yield i  


# Звичайна функція  
def regular_function(n):  
 print("regular_function повертає")  
 return [i for i in range(n)]  


for item in generator_function(10):  
 print(item)  

temp_list = regular_function(10)  
print(temp_list)
generator_function генерує 0  
0  
generator_function генерує 1  
1  
generator_function генерує 2  
2  
generator_function генерує 3  
3  
generator_function генерує 4  
4  
generator_function генерує 5  
5  
generator_function генерує 6  
6  
generator_function генерує 7  
7  
generator_function генерує 8  
8  
generator_function генерує 9  
9  
regular_function повертає  
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

Як ви можете побачити з повідомлень, функція-генератор генерує одне значення за раз, тоді як звичайна функція повертає весь список одразу.

Перекладено з: Generator Function (yield keyword) in Python

Leave a Reply

Your email address will not be published. Required fields are marked *