Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Вивчайте Ланцюжкове З'єднання та Композиція Ітераторів | Python Iterators
Концепції функціонального програмування в Python

bookЛанцюжкове З'єднання та Композиція Ітераторів

Свайпніть щоб показати меню

Ланцюжки та композиція ітераторів дозволяють створювати потужні конвеєри обробки даних у Python. Об'єднуючи прості ітераторні або генераторні функції, можна поетапно обробляти дані, на кожному етапі трансформуючи або фільтруючи їх перед передачею далі. Такий підхід особливо корисний, коли потрібно застосувати кілька операцій послідовно, наприклад, спочатку відфільтрувати елементи, а потім трансформувати їх, або об'єднати дані з кількох джерел. Відео вище демонструє, як можна використовувати генераторні конвеєри для збереження модульності коду та ефективного використання пам'яті, уникаючи створення проміжних списків.

Щоб побачити це на практиці, розгляньте ситуацію, коли у вас є послідовність чисел, і ви хочете відфільтрувати парні числа, а потім піднести до квадрату решту. Це можна реалізувати, об'єднавши два генераторних функції: одну для фільтрації, іншу для трансформації. Такий підхід гарантує, що кожен елемент обробляється лише за потреби, роблячи код лаконічним та ефективним.

12345678910111213141516171819
def filter_odds(numbers): for n in numbers: if n % 2 != 0: yield n def square_numbers(numbers): for n in numbers: yield n ** 2 # Original data data = range(10) # Chain the generators: first filter, then transform filtered = filter_odds(data) squared = square_numbers(filtered) # Collect results result = list(squared) print(result) # Output: [1, 9, 25, 49, 81]
copy

Перша функція, filter_odds, приймає ітерований об'єкт чисел і повертає лише ті, що є непарними. Друга функція, square_numbers, приймає ітерований об'єкт і повертає квадрат кожного числа. Передаючи результат filter_odds безпосередньо у square_numbers, ви створюєте конвеєр: спочатку фільтрація, потім трансформація даних. Кінцевий результат збирається у список і виводиться, демонструючи квадрати всіх непарних чисел від 0 до 9.

Цей метод є ефективним щодо пам'яті, оскільки кожне значення обробляється по одному, без створення проміжних списків. Також код залишається модульним, оскільки кожна генераторна функція виконує одну задачу і може бути використана в різних конвеєрах.

question mark

Яка з наведених переваг ланцюжкового з'єднання ітераторів і генераторів у Python?

Виберіть правильну відповідь

Все було зрозуміло?

Як ми можемо покращити це?

Дякуємо за ваш відгук!

Секція 5. Розділ 6

Запитати АІ

expand

Запитати АІ

ChatGPT

Запитайте про що завгодно або спробуйте одне із запропонованих запитань, щоб почати наш чат

Секція 5. Розділ 6
some-alt