Генераторы в Python - это специальный тип функций, которые позволяют создавать итерируемые последовательности значений по требованию. Они эффективно используются для работы с большими объемами данных или при необходимости создания последовательностей значений без занимания большого объема памяти. Генераторы могут быть использованы в циклах, в функциях `for...in`, а также в других контекстах, где ожидается итерируемый объект.
Генераторы списков (List Comprehensions)
# Пример генератора списка чисел от 0 до 9
gen_list = [x for x in range(10)]
print(gen_list) # Вывод: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
# Пример генератора списка квадратов чисел от 0 до 9
squared = [x**2 for x in range(10)]
print(squared) # Вывод: [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
Генераторы множеств (Set Comprehensions)
# Пример генератора множества квадратов чисел от 0 до 9
squared_set = {x**2 for x in range(10)}
print(squared_set) # Вывод: {0, 1, 4, 9, 16, 25, 36, 49, 64, 81}
Генераторы словарей (Dictionary Comprehensions)
# Пример генератора словаря, где ключами являются числа от 0 до 4, а значениями - их квадраты
squared_dict = {x: x**2 for x in range(5)}
print(squared_dict) # Вывод: {0: 0, 1: 1, 2: 4, 3: 9, 4: 16}
Генераторы кортежей (Tuple Comprehensions)
# Пример генератора кортежа квадратов чисел от 0 до 4
squared_tuple = tuple(x**2 for x in range(5))
print(squared_tuple) # Вывод: (0, 1, 4, 9, 16)
Генераторы выражений (Generator Expressions)
# Пример генератора выражения квадратов чисел от 0 до 9
squared_gen = (x**2 for x in range(10))
print(squared_gen) # Вывод: <generator object <genexpr> at 0x7f9dfc9e3940>
print(list(squared_gen)) # Преобразование генератора в список
Генераторы в Python очень полезны при обработке больших объемов данных и позволяют экономить память компьютера, так как они генерируют значения по мере необходимости, а не сохраняют их все сразу в памяти. Они также обеспечивают более чистый и компактный синтаксис кода, что делает его более читаемым и поддерживаемым.
Генераторы с условиями, также известные как условные генераторы, позволяют создавать итерируемые объекты, удовлетворяющие определенным условиям. Это удобный способ фильтрации значений и создания последовательностей только тех элементов, которые соответствуют определенным критериям. Примеры таких генераторов:
Генераторы списков с условиями
# Создание списка четных чисел от 0 до 9
even_numbers = [x for x in range(10) if x % 2 == 0]
print(even_numbers) # Вывод: [0, 2, 4, 6, 8]
# Создание списка квадратов нечетных чисел от 0 до 9
squared_odd_numbers = [x**2 for x in range(10) if x % 2 != 0]
print(squared_odd_numbers) # Вывод: [1, 9, 25, 49, 81]
Генераторы множеств с условиями
# Создание множества четных чисел от 0 до 9
even_numbers_set = {x for x in range(10) if x % 2 == 0}
print(even_numbers_set) # Вывод: {0, 2, 4, 6, 8}
# Создание множества квадратов нечетных чисел от 0 до 9
squared_odd_numbers_set = {x**2 for x in range(10) if x % 2 != 0}
print(squared_odd_numbers_set) # Вывод: {1, 9, 25, 49, 81}
Генераторы словарей с условиями
# Создание словаря, где ключами являются четные числа от 0 до 4, а значениями - их квадраты
even_squared_dict = {x: x**2 for x in range(5) if x % 2 == 0}
print(even_squared_dict) # Вывод: {0: 0, 2: 4, 4: 16}
Генераторы выражений с условиями
# Создание генератора выражения, возвращающего квадраты четных чисел от 0 до 9
squared_even_gen = (x**2 for x in range(10) if x % 2 == 0)
print(list(squared_even_gen)) # Преобразование генератора в список