Русский
Открыть в Telegram
PPythoner

Pythoner

@pythonercode · канал · Технологии · в индексе с 20.04.2026
6 535подписчиков−43 за неделю
637средний охват поста
9.8%ER — охват к подписчикам
6постов за 30 дней
P
Pythoner
Фотография
✈️Казалось бы, куда еще проще, но есть один интересный пакет JMESpath, который позволяет декларативно указать, как извлекать элементы из документа JSON. ➡️Основные примеры использования: import jmespath jmespath.search('foo.bar', {'foo': {'bar': 'baz'}}) # output: 'baz' jmespath.search('foo.*.name', {'foo': {'bar': {'name': 'one'}, 'baz': {'name': 'two'}}}) # output: ['one', 'two'] ⬆️Тут нет ничего сложного. Метод search принимает паттерн, по которому требуется извлечь данные, а также словарь (который в общем-то похож на JSON). ➡️Возможностей у пакета достаточно, поэтому он достоен изучения и применения в проектах. Подробнее можно почитать в документации. 🐍Pythoner
15 · 1.5K ·
P
Pythoner
Фотография
✈️В Python целые числа имеют "бесконечную" точность. Это означает, что вы можете работать с целыми числами любого размера, не беспокоясь о переполнении. ➡️Например, давайте возьмем число 2 и возведем его в степень 1000: print(2**1000) ➡️Результат: 10715086071862673209484250490600018105614048117055336074437503883703510511249361224931983788156958581275946729175531468251871452856923140435984577574698574803934567774824230985421074605062371141877954182153046474983581941267398767559165543946077062914571196477686542167660429831652624386837205668069376 ⬆️Это число содержит 302 цифры! ➡️В других языках программирования, таких как C или Java, вы бы столкнулись с ограничениями при работе с такими большими числами. Но в Python вы можете спокойно работать с числами практически любого размера. Это очень удобно для таких областей, как криптография или научные вычисления, где часто требуется работа с очень большими числами. Однако важно помнить, что хотя Python может обрабатывать такие большие числа, это может повлиять на производительность при выполнении операций с ними. Поэтому, если вам не нужна такая высокая точность, лучше использовать стандартные типы данных. В целом, эта особенность Python делает его очень мощным инструментом для работы с целыми числами любого размера. 🐍Pythoner
8 · 1.4K ·
P
Pythoner
Фотография
✈️При вызове скрипта Python можно указать различные параметры/флаги для большей гибкости. Вот наиболее часто используемые варианты: * -h или --help: Выводит справку по доступным флагам. * -V или --version: Выводит номер версии Python. * -m <module>: Запускает модуль как скрипт (например, python -m venv venv). * -c <command>: Выполняет указанную команду Python (например, python -c "print('Hello, World!')"). * -i: Включает интерактивный режим REPL после выполнения скрипта. * -O: Включает оптимизацию байт-кода (удаляет операторы assert и любой код, зависящий от значения __debug__). * -OO: Более агрессивная оптимизация, удаляющая docstrings. * -B: Отключает создание файлов .pyc (с компилированным байт-кодом). * -W: Контролировать частоту вывода предупреждений. 💡Это лишь некоторые из наиболее распространенных флагов. 🔗 подробнее 🐍Pythoner
15 · 1.2K ·
P
Pythoner
Фотография
✈️Модуль string в Python предоставляет ряд полезных констант, которые помогают работать со строками более эффективно и удобно. ➡️Основной список: 1. string.ascii_letters: Содержит все буквы английского алфавита (как заглавные, так и строчные). 2. string.digits: Включает все десятичные цифры от 0 до 9. 3. string.hexdigits: Содержит шестнадцатеричные цифры (0-9 и a-f, A-F). 4. string.octdigits: Включает восьмеричные цифры (0-7). 5. string.punctuation: Содержит все знаки пунктуации. 6. string.whitespace: Включает все пробельные символы (пробелы, табуляции и переносы строк). ➡️Пример использования: import string # Функция проверяет, состоит ли строка только из букв def is_alpha(s): return all(char in string.ascii_letters for char in s) # Тестируем функцию print(is_alpha("HelloWorld")) # Вывод: True print(is_alpha("Hello World!")) # Вывод: False 💡Заключение Константы из модуля string значительно упрощают обработку строк и могут быть использованы в различных алгоритмах, таких как валидация ввода, фильтрация символов и т.д. 🐍Pythoner
14 · 1.2K ·
P
Pythoner
Фотография
✈️Одним из основных преимуществ Pendulum является возможность легко создавать и форматировать даты. Давайте рассмотрим пример: import pendulum # Создание даты date = pendulum.datetime(2023, 10, 5) # Форматирование даты formatted_date = date.format('YYYY-MM-DD') print(formatted_date) # Вывод: 2023-10-05 ⬆️С помощью Pendulum вы можете легко создавать даты и форматировать их в нужный формат с помощью метода format. ➡️Работа с временными зонами Pendulum значительно упрощает работу с временными зонами. Пример создания даты в одной временной зоне и её преобразования в другую: # Создание даты в временной зоне 'Europe/Moscow' moscow_time = pendulum.datetime(2023, 10, 5, tz='Europe/Moscow') print(moscow_time) # Вывод: 2023-10-05T00:00:00+03:00 # Преобразование в другую временную зону ny_time = moscow_time.in_timezone('America/New_York') print(ny_time) # Вывод: 2023-10-04T17:00:00-04:00 ⬆️С Pendulum работа с временными зонами становится интуитивно понятной и простой! ➡️Различные операции с датами Pendulum предоставляет широкий набор методов для выполнения различных операций с датами. Пример добавления и вычитания временных интервалов: # Создание даты date = pendulum.datetime(2023, 10, 5) # Добавление 5 дней new_date = date.add(days=5) print(new_date) # Вывод: 2023-10-10T00:00:00+00:00 # Вычитание 2 часов new_date = date.subtract(hours=2) print(new_date) # Вывод: 2023-10-04T22:00:00+00:00 ⬆️С методами add и subtract вы можете легко выполнять арифметические операции с датами, что делает работу с временными интервалами очень удобной. 🐍Pythoner
13 · 1.5K ·
P
Pythoner
Фотография
✈️git merge объединяет две ветки, создавая новый коммит, который объединяет изменения из обеих веток. Это означает, что вся история обеих веток сохраняется, и создается так называемый "слияние" (merge commit). ✈️git rebase позволяет переназначить (переписать) коммиты из одной ветки на другую. Это создаёт новое основание для вашей ветки и делает историю более линейной, очищая её от избыточных merge-коммитов. 🐍Pythoner
9 · 1.4K ·
P
Pythoner
Фотография
✈️Байтовые объекты представляют собой последовательность байтов, которая хранит информацию в двоичном формате. ➡️В Python байтовые объекты представлены типами данных bytes и bytearray. Различие заключается в том, что bytes является неизменяемым типом данных, в то время как bytearray - изменяемым. Также в Python имеется тип данных memoryview, предоставляющий доступ к внутренним данным объекта, который поддерживает буферный протокол, без копирования. Для создания байтовых объектов можно использовать байтовые литералы (синтаксис схож со строковыми литералами, за исключением того, что добавляется префикс "b"). ➡️В Python также существует модуль struct, который позволяет работать с байтовыми данными на низком уровне, осуществляя их упаковку и распаковку. 💡Эти объекты часто используются для работы с бинарными файлами, сетевыми пакетами и другими данными, которые нужно представить в виде последовательности байтов. 🐍Pythoner
12 · 1.5K ·
P
Pythoner
Фотография
✈️Распаковка значений в Python - это способ присвоения значений из итерируемых объектов переменным. Это позволяет извлечь значения из списка, кортежа, строки или других итерируемых объектов и присвоить их отдельным переменным. ➡️Комбинации с примерами и краткими описаниями: 1. Распаковка в несколько переменных: a, b, c = 1, 2, 3 # a = 1, b = 2, c = 3 ➡️Присваивание значений из кортежа переменным. 2. Распаковка посимвольно в строки: a, b = "12" # a = '1', b = '2' ➡️Разделение строки на отдельные символы и присваивание их переменным. 3. Распаковка с использованием звёздочки (*): a, *b = 1, 2, 3 # a = 1, b = [2, 3] ➡️Сбор оставшихся значений в список с использованием звёздочки. 4. Распаковка в переменную со звёздочкой (*): a, *b, c = 1, 2, 3, 4 # a = 1, b = [2, 3], c = 4 ➡️Присваивание первого и последнего значения, а остаток помещается в список. 5. Игнорирование значений при распаковке: a, _, b = 7, 8, 9 # a = 7, b = 9 (значение 8 игнорируется) Пропуск значений, которые не нужны при присвоении. ➡️Различные итерируемые объекты: Можно использовать любые итерируемые объекты, такие как списки, кортежи, строки, объекты, поддерживающие итерацию и даже функция range(): - Список: a, b, c = [4, 5, 6] # a = 4, b = 5, c = 6 - Кортеж: x, y = (10, 20) # x = 10, y = 20 - Строка: char1, char2, char3 = "xyz" # char1 = 'x', char2 = 'y', char3 = 'z' - Использование range(): a, b, c = range(1, 4) # a = 1, b = 2, c = 3 💡Заключение: Распаковка значений в Python - удобный и эффективный способ присваивания значений переменным из итерируемых объектов, делая код более читаемым и компактным. Это дает гибкость при работе с данными различных типов и структур. 🐍Pythoner
22 · 1.6K ·
P
Pythoner
Фотография
✈️OnnxOCR — это проект для распознавания текста с использованием ONNX Runtime, предлагающий эффективную модель без тяжелых фреймворков. ✈️Его главные плюсы — это портативность и скорость работы благодаря оптимизированным нейросетевым весам. 💡Отличное решение для встраивания в ваши Python-скрипты для обработки изображений там, где не нужны монструозные библиотеки. ⛓ Документация 🐍Pythoner
17 · 1.4K ·
P
Pythoner
Фотография
✈️В asyncio есть два способа запустить корутину: - await — ждёт, пока задача завершится. - loop.create_task() — запускает задачу в фоне, не блокируя выполнение остального кода. ➡️Если ты используешь await, выполнение кода останавливается, пока корутина не закончится. А вот create_task() добавляет её в event loop — и она работает параллельно с другими задачами. ➡️Пример: import asyncio async def task(name): print(f"Начал {name}") await asyncio.sleep(2) print(f"Закончил {name}") async def main(): t1 = asyncio.create_task(task("Задача 1")) t2 = asyncio.create_task(task("Задача 2")) print("Обе задачи запущены!") await t1 await t2 asyncio.run(main()) обе задачи выполняются одновременно, а не по очереди. 💡Это важно, если ты пишешь сетевые приложения, обрабатываешь запросы или работаешь с I/O — именно create_task() делает Python по-настоящему асинхронным. 🐍Pythoner
19 · 1.5K ·
P
Pythoner
Фотография
✈️Aiopandas — это легковесный патч для Pandas, который добавляет асинхронную поддержку для популярных методов обработки данных. ➡️Библиотека не блокирует event loop при операциях ввода-вывода и позволяет параллельно обрабатывать несколько DataFrame, что особенно полезно для веб-приложений на FastAPI или aiohttp. 💡Идеально для проектов, где нужно совмещать анализ данных с асинхронными операциями: работа с LLM-моделями, веб-скрапинг или асинхронное взаимодействие с базами данных. ⛓ Документация 🐍Pythoner
21 · 1.7K ·
P
Pythoner
Фотография
➡️Основные возможности GeoPandas GeoPandas расширяет функциональность pandas, добавляя поддержку геометрических типов данных. Это позволяет эффективно работать с пространственными данными, выполнять геометрические операции и визуализировать результаты. ➡️Ключевые особенности: 💬Поддержка различных форматов геоданных (Shapefile, GeoJSON и др.) 💬Геометрические операции (пересечение, объединение, буферизация) 💬Пространственные соединения и агрегации 💬Интеграция с matplotlib для визуализации ➡️Простой пример: import geopandas as gpd # Чтение геоданных gdf = gpd.read_file('path/to/your/geodata.shp') # Базовые операции print(gdf.head()) print(gdf.crs) # Система координат ➡️Практические примеры использования Визуализация данных import matplotlib.pyplot as plt gdf.plot() plt.title('Визуализация геоданных') plt.show() ➡️Пространственные операции Выполнение геометрических операций, таких как буферизация: buffered = gdf.geometry.buffer(1) # Создание буфера в 1 единицу ➡️Пространственные соединения Объединение двух наборов геоданных на основе их пространственных отношений: cities = gpd.read_file('cities.shp') countries = gpd.read_file('countries.shp') cities_with_countries = gpd.sjoin(cities, countries, how="inner", predicate="within") ➡️Преимущества использования GeoPandas: 💬Эффективная обработка больших объемов геоданных 💬Интеграция с экосистемой Python для анализа данных 💬Упрощение сложных геопространственных операций 💬Возможность создания высококачественных картографических визуализаций 🐍Pythoner
15 · 1.5K ·
P
Pythoner
Фотография
✈️PyMuPDF — это мощная и невероятно быстрая библиотека для работы с PDF-документами прямо из Python. ➡️Она позволяет с легкостью извлекать текст, изображения и метаданные, конвертировать страницы в изображения и даже работать с аннотациями, обеспечивая при этом одну из самых высоких скоростей обработки в своем классе благодаря низкоуровневой оптимизации. 💡Идеально для автоматизации массовой обработки сканированных документов или отчетов — быстро извлекайте нужные данные без рутинных операций. ⛓ Документация 🐍Pythoner
29 · 2.1K ·
P
🤔Разбор Срез x[::-1] инвертирует список, Применение его трижды возвращает исходный порядок. 🐍 Pythoner
2 · 2K ·
P
Pythoner
Фотография
➡️Функция all в Python Функция all принимает на вход итерируемый объект (например, список) и возвращает True, если все его элементы являются истинными (или, если итерируемый объект пустой). Например: numbers = [1, 2, 3, 4] print(all(numbers)) # Выводит: True ⬆️В этом примере функция all вернула True, потому что все числа в списке numbers являются истинными (то есть, не равны нулю). ➡️Функция any в Python Функция any, как и all, принимает на вход итерируемый объект, но возвращает True, если хоть один из его элементов является истинным. Если итерируемый объект пустой, функция any возвращает False. Например: numbers = [0, 0, 1, 0] print(any(numbers)) # Выводит: True ⬆️В этом случае функция any вернула True, потому что в списке numbers было хотя бы одно истинное значение (1). ➡️Использование all и any вместе Функции all и any можно использовать вместе, чтобы проверить сложные условия. Например, мы можем проверить, все ли элементы в списке положительные и есть ли среди них хоть одно четное число: numbers = [1, 2, 3, 4] print(all(num > 0 for num in numbers) and any(num % 2 == 0 for num in numbers)) # Выводит: True ⬆️В этом примере функция all вернет True, если все числа в списке будут положительными, а функция any вернет True, если среди чисел будет хотя бы одно четное. 🐍 Pythoner
7 · 2K ·
P
Pythoner
Фотография
✈️Конструкция raise используется для генерации исключений. Когда в коде происходит что-то непредвиденное или некорректное — можно сгенерировать исключение командой raise. ➡️Основные моменты конструкции raise: —Возбуждение существующих исключений: Вы можете использовать raise без каких-либо параметров в блоке except, чтобы повторно вызвать текущее исключение. —Создание собственных исключений: Вы можете создать или вызвать собственное исключение, создав объект исключения и передав его в raise. ➡️Пример использования raise: def divide(a, b): if b == 0: raise ValueError("Деление на ноль невозможно.") return a / b try: result = divide(10, 0) except ValueError as e: print(f"Ошибка: {e}") ⬆️В этом примере функция divide вызывает исключение ValueError, если второй аргумент равен нулю. В блоке try мы пытаемся выполнить деление, и если возникает ошибка, мы перехватываем её и выводим сообщение об ошибке. 🐍Pythoner
12 · 2K ·
P
Pythoner
Фотография
✈️В мире разработки программного обеспечения постоянно появляются новые тренды и подходы. Одним из таких трендов, набирающих популярность в последние годы, является функциональное программирование (ФП). Давайте разберемся, почему это происходит! ➡️Что такое функциональное программирование? Функциональное программирование - это парадигма, в которой процесс вычисления рассматривается как вычисление математических функций. Основная идея заключается в том, чтобы избегать изменяемого состояния и мутаций данных. ➡️Почему ФП становится популярнее? 💬Упрощение параллельного программирования: Отсутствие побочных эффектов делает код более предсказуемым и легким для распараллеливания. 💬Меньше багов: Неизменяемость данных и чистые функции снижают вероятность ошибок, связанных с состоянием программы. 💬Более читаемый код: ФП поощряет написание небольших, специализированных функций, что улучшает читаемость и поддерживаемость кода. 💬Легкость тестирования: Чистые функции легче тестировать, так как их поведение зависит только от входных данных. 💬Производительность: Некоторые функциональные концепции, такие как ленивые вычисления, могут повысить производительность программ. ➡️Заключение Функциональное программирование становится все популярнее благодаря своим преимуществам в читаемости, тестируемости и параллельном выполнении. Хотя оно может потребовать некоторого времени для освоения, инвестиции в изучение ФП могут значительно улучшить качество вашего кода и эффективность разработки. 🐍Pythoner
6 · 2.4K ·
P
Pythoner
Фотография
✈️Зачем вообще париться с памятью в Python? Казалось бы, Python — язык высокого уровня с автоматическим управлением памятью. Зачем нам вообще беспокоиться об этом? Но, друзья мои, даже в Пайтоне память не бесконечна. Особенно когда вы работаете с большими данными или создаете высоконагруженные приложения. ➡️memory_profiler: ваш верный спутник memory_profiler — это как швейцарский нож для анализа памяти. Вот пример его использования: from memory_profiler import profile @profile def my_func(): a = [1] * (10 ** 6) b = [2] * (2 * 10 ** 7) del b return a if __name__ == '__main__': my_func() ⬆️Запустите скрипт с помощью python -m memory_profiler script.py, и вы увидите подробный отчет о использовании памяти. Красота, правда? ➡️line_profiler: когда нужна точность до строчки Если memory_profiler — это швейцарский нож, то line_profiler — это микроскоп. Он покажет вам использование памяти построчно: @profile def my_func(): a = [1] * (10 ** 6) b = [2] * (2 * 10 ** 7) del b return a my_func() ⬆️Запустите с помощью kernprof -l -v script.py, и вы увидите, какая строчка сколько памяти съедает. ➡️objgraph: визуализируем объекты objgraph — это как рентген для вашего кода. Он позволяет визуализировать объекты в памяти: import objgraph x = [] y = [x, [x], dict(x=x)] objgraph.show_refs([y], filename='sample-graph.png') ⬆️Запустите это, и вы получите красивую картинку связей между объектами. Полезно для поиска утечек памяти! ➡️tracemalloc: встроенная мощь Python А теперь — жемчужина в короне Python 3. tracemalloc — это встроенный модуль для отслеживания выделения памяти: import tracemalloc tracemalloc.start() # ваш код здесь snapshot = tracemalloc.take_snapshot() top_stats = snapshot.statistics('lineno') print("[ Топ 10 ]") for stat in top_stats[:10]: print(stat) ⬆️Это как рентген, МРТ и УЗИ в одном флаконе. Вы увидите, где именно происходят утечки памяти. 🐍Pythoner
26 · 2.4K ·
P
Pythoner
Фотография
✈️OpenAI Gym - это библиотека Python, которая предоставляет набор виртуальных сред для обучения агентов искусственного интеллекта. Среды Gym представляют собой упрощенные модели реальных задач, таких как игра в гольф, вождение автомобиля или управление роботом. 🔎Библиотека Gym может использоваться для: ➡️Для обучения агентов искусственного интеллекта, таких как нейронные сети и генетические алгоритмы. ➡️Для исследования искусственного интеллекта, например, для разработки новых алгоритмов обучения агентов. ➡️Для визуализации действий агентов искусственного интеллекта. ➡️OpenAI Gym предоставляет простой и интуитивно понятный интерфейс для взаимодействия с средами. Разработчики могут создавать агентов, определять действия, наблюдать состояния и получать обратную связь. Он также предлагает мощные инструменты для оценки и сравнения алгоритмов машинного обучения, позволяя разработчикам точно измерять производительность своих моделей. 🐍Pythoner
8 · 2.3K ·
P
Pythoner
Фотография
💬HTTP GET Этот метод извлекает ресурс с сервера. Он идемпотентен: несколько идентичных запросов возвращают один и тот же результат. 💬HTTP PUT Этот метод обновляет или создает ресурс. Он также идемпотентен: несколько идентичных запросов обновят один и тот же ресурс. 💬HTTP POST Этот метод используется для создания новых ресурсов. Он не идемпотентен: два одинаковых POST-запроса создадут дублированные ресурсы. 💬HTTP DELETE Этот метод используется для удаления ресурса. Он идемпотентен: несколько идентичных запросов удалят один и тот же ресурс. 💬HTTP PATCH Метод PATCH применяется для частичного изменения ресурса. 💬HTTP HEAD Метод HEAD запрашивает ответ, идентичный GET-запросу, но без тела ответа. 💬HTTP CONNECT Метод CONNECT устанавливает туннель к серверу, идентифицированному целевым ресурсом. 💬HTTP OPTIONS Этот метод описывает параметры связи для целевого ресурса. 💬HTTP TRACE Этот метод выполняет тест возврата сообщения по пути к целевому ресурсу. 👀Так же прикрепляю фото без сжатия если будет плохо видно на основном фото 🐍Pythoner
22 · 2.4K ·
P
Pythoner
Фотография
✈️Скачивание файла с помощью requests довольно прямолинейно. Вам просто нужно сделать запрос к URL-адресу файла, который вы хотите скачать, а затем записать ответ в файл. Вот пример кода, который скачивает изображение с интернета: import requests url = '<https://example.com/image.jpg>' response = requests.get(url) with open('image.jpg', 'wb') as f: f.write(response.content) ➡️Работа с ошибками Важно обрабатывать возможные ошибки при скачивании файла. Если файл не найден или произошла другая ошибка, requests вернет код ответа, отличный от 200. В этом случае вы должны проверять статус ответа перед записью файла. ➡️Вот пример кода, который скачивает реальный pdf файл с сайта: import requests headers = {'referer': 'https://nottka.com/4364-yoshinao-nakada-etude-allegro.html'} response = requests.get('https://nottka.com/index.php?do=download&id=4420', headers=headers) with open('4420.pdf', 'wb') as file: file.write(response.content) 🐍Pythoner
13 · 2.3K ·
P
Pythoner
Фотография
✈️Монолитная архитектура Монолитная архитектура представляет собой традиционный подход к разработке приложений, где все компоненты тесно связаны и работают как единое целое. ➕Преимущества: 💬Простота разработки и развертывания 💬Легкость в отладке и тестировании 💬Высокая производительность из-за отсутствия сетевых задержек между компонентами ❌Недостатки: 💬Сложность масштабирования отдельных компонентов 💬Затруднительное внедрение новых технологий 💬Риск "снежного кома" при росте сложности проекта ➡️Микросервисная архитектура Микросервисная архитектура разбивает приложение на набор небольших, независимых сервисов, каждый из которых отвечает за конкретную бизнес-функцию. ➕Преимущества: 💬Гибкость в выборе технологий для каждого сервиса 💬Легкость масштабирования отдельных компонентов 💬Возможность независимой разработки и развертывания сервисов ❌Недостатки: 💬Сложность в управлении и оркестрации множества сервисов 💬Повышенные требования к инфраструктуре 💬Потенциальные проблемы с производительностью из-за сетевых взаимодействий 🔎Что выбрать для вашего проекта? Выбор архитектуры зависит от нескольких факторов: ➡️Выбирайте монолитную архитектуру, если: 💬У вас небольшой проект или стартап 💬Вам нужно быстро вывести продукт на рынок 💬У вас ограниченные ресурсы для разработки и поддержки ➡️Выбирайте микросервисную архитектуру, если: 💬У вас крупный проект с множеством функций 💬Вам нужна высокая масштабируемость и гибкость 💬У вас есть ресурсы для управления сложной инфраструктурой ➡️Заключение Выбор между микросервисами и монолитной архитектурой не является универсальным. Каждый подход имеет свои сильные стороны, и правильный выбор зависит от конкретных требований вашего проекта, ресурсов команды и долгосрочных целей. Важно тщательно оценить все факторы и принять решение, которое наилучшим образом соответствует вашим потребностям. 🐍Pythoner
8 · 2.4K ·
P
Pythoner
Фотография
✈️Что такое итерируемый счетчик? Итерируемый счетчик в Python - это объект, который можно использовать в цикле for и других итерационных контекстах. Он позволяет последовательно получать значения, обычно числовые, в заданном диапазоне или по определенному правилу. ➡️Реализация итерируемого счетчика Давайте рассмотрим пример реализации простого итерируемого счетчика: class IterableCounter: def __init__(self, start, end): self.current = start self.end = end def __iter__(self): return self def __next__(self): if self.current > self.end: raise StopIteration else: self.current += 1 return self.current - 1 В этом примере: 💬init инициализирует счетчик начальным и конечным значениями. 💬iter возвращает сам объект, делая его итератором. 💬next определяет логику получения следующего значения. ➡️Использование итерируемого счетчика Теперь мы можем использовать наш счетчик в цикле for: counter = IterableCounter(1, 5) for num in counter: print(num) ⬆️Этот код выведет числа от 1 до 5. ➡️Преимущества итерируемого счетчика 💬Гибкость: можно легко изменить логику генерации значений. 💬Экономия памяти: значения генерируются по мере необходимости. 💬Интеграция с циклами: легко использовать в стандартных конструкциях Python. ➡️Альтернативы В Python есть встроенные альтернативы для простых случаев: 💬range(): для последовательностей целых чисел. 💬enumerate(): для нумерации элементов итерируемого объекта. 💡Заключение Итерируемые счетчики в Python - мощный инструмент для создания пользовательских последовательностей. Они особенно полезны, когда стандартные функции не удовлетворяют специфическим требованиям вашей задачи. 🐍Pythoner
14 · 2.3K ·

Открытая публичная лента из поискового индекса ChatCrawler — «Google по публичному Telegram»; обновляется по мере обхода площадки. Время — UTC.

Только публичный контент, официальный API Telegram. О проекте · Вопросы · Границы индекса · Убрать страницу из выдачи · Каталог · Поиск · Как мы считаем