TGINSIGHT CHAT
Python Academy
@python_academy
EducaciónPython Academy — один канал вместо тысячи учебников Чат канала: @python_academy_chat Сотрудничество: @zubar89 Канал включён в перечень РКН: https://rkn.link/TVu
Posts recientes
Pág. 40 de 85 · 1,014 posts
Улучшенные отчеты об ошибках В последнем обновлении Python 3.10 добавили более удобную и точную информацию об ошибках. Теперь выводится и природа ошибки, и ее местоположение в коде. Для ошибок, связанных с опечатками в названиях атрибутов и имен переменных в функциях, добавили рекомендации по исправлению. #updates
Hashtags
Упрощенная работа с JSON Казалось бы, куда еще проще, но есть один интересный пакет JMESpath, который позволяет декларативно указать, как извлекать элементы из документа JSON. Основные примеры использования показаны на картинке, там нет ничего сложного. Метод search принимает паттерн, по которому требуется извлечь данные, а также словарь (который в общем-то похож на JSON). Вообще возможностей у пакета достаточно, поэтому он достоен изучения и применения в проектах. Подробнее советую почитать в документации. #json#jmespath
Слабые ссылки Weakref позволяет создавать слабые ссылки к объектам, но не поддерживают объект живым, если не осталось больше сильных ссылок. Слабые ссылки нужны для организации кэшей и хеш-таблиц из тяжелых объектов, потому что в долгоживущих программах может закончится память из-за большого хранения в кэшах. #weakref
Hashtags
PyOxidizer PyOxidizer — это инструмент, позволяющий упаковать Python-проект в единый исполняемый файл, включающий интерпретатор Python, все необходимые библиотеки и ресурсы. Это позволяет запускать ваши приложения без необходимости предварительной установки Python или каких-либо зависимостей. #python
Hashtags
Использование внешних процессов в Python с помощью subprocess В мире программирования бывают моменты, когда необходимо взаимодействовать с внешними программами из кода на Python. Для этих задач отлично подходит модуль subprocess, который предоставляет удобный способ запуска внешних процессов, передачи данных им и получения результатов выполнения. Что такое subprocess? subprocess - это модуль Python, который предоставляет множество возможностей для запуска новых процессов, подключения к существующим процессам, а также обмена данными между вашим кодом и внешними программами. Пример использования subprocess: import subprocess # Простой пример: выполнение команды "ls" в командной строке result = subprocess.run(['ls', '-l'], stdout=subprocess.PIPE, text=True) # Вывод результата выполнения команды print(result.stdout) В данном примере мы использовали subprocess.run для выполнения команды "ls -l". Параметр stdout=subprocess.PIPE указывает на перенаправление вывода команды в переменную result.stdout. Параметр text=True гарантирует, что вывод будет в текстовом формате. Передача данных и получение результата: import subprocess # Передача данных в команду и получение результата input_data = "Hello, subprocess!" result = subprocess.run(['echo', input_data], stdout=subprocess.PIPE, text=True) # Вывод результата выполнения команды print(result.stdout) В данном примере мы использовали команду echo для вывода переданных данных. subprocess.run позволяет передавать данные в команду через параметр input. subprocess также предоставляет множество других функций для более сложных сценариев взаимодействия с процессами, таких как запуск процесса в фоновом режиме, обработка ошибок, а также потоковый вывод данных. #python#subprocess
Hashtags
Как работают арифметические операции Если кто-то еще не знает, то в Python всё является объектами: числа в том числе. И при любых операциях, включая арифметические, у объектов вызываются магические методы. Например, при сложении у объекта первого слагаемого вызывается соответствующий магический метод и в качестве аргумента передается объект второго слагаемого. Еще стоит отметить, что у float поддерживается деление с остатком, то есть метод __div__. А int имеет только деление с округлением, реализованное в методе __floordiv__. #magic
Hashtags
Классы данных Еще в Python 3.7 добавили такую мощную штуку, как классы данных. Они призваны автоматизировать генерацию кода классов, которые используются для хранения данных. Встроенный модуль dataclasses содержит декоратор @dataclass. С его использованием код будет выглядеть лаконично и коротко. Пример на картинке выше. Важно отметить, что аннотации типов обязательны. Все поля, которые не имеют отметок о типе будут проигнорированы. Конечно, если вы не хотите использовать конкретный тип, вы можете указать Any из модуля typing. В результате вы автоматически получаете класс, с реализованными методами __init__, __repr__, __str__ и __eq__. Кроме того, это будет обычный класс и вы можете наследоваться от него или добавлять произвольные методы. #dataclass
Hashtags
Итерируемый счетчик Еще один классный итератор из itertools — это count, который генерирует бесконечную последовательность чисел. В аргументах можно задать значения start и step: первый отвечает за начальное значение, а второе за шаг, как и в range. Обычно count редко используют с циклом for. Чаще можно встретить случаи с функциями типа zip или map. #itertools
Hashtags
Отлавливаем баги с assert При выполнении инструкции assert с логическим выражением, результат которого равен True, ничего не произойдет. Но если попробовать выполнить инструкцию assert с логическим выражением, которое равно False, то будет сгенерировано исключение AssertionError. Исключения AssertionError предназначены скорее для отладки. При написании программ на этапе разработки мы можем видеть, что делаем что-то не так (например, передали в метод некорректное значение). Также не нужно, к примеру, обрабатывать пользовательский ввод и пытаться обработать исключение AssertionError блоком try-except. Если в вашем коде будет очень много assert'ов, то это затронет и производительность программы. #исключения#assert
Hashtags
Получаем и задаем лимит рекурсии В Python не оптимизируется хвостовая рекурсия, из-за чего зачастую возникает RecursionError во время создания рекурсивных алгоритмов. Но с помощью модуля sys можно посмотреть и даже изменить максимальную глубину рекурсии. Хотя делать это слегка опасно, так как каждый новый вызов занимает много памяти. И вообще лучше стараться использовать не рекурсию, а обычные циклы, но это вы и так сами знаете. #рекурсия#лимиты
FastAPI FastAPI – фреймворк, про который однозначно стоит рассказать. Честно, синтаксис мне кажется намного приятнее, чем у других фреймворков. Интересно, что автор фреймворка глубоко изучил несколько других фреймворков, от классических, таких как Django, до более современных, таких как Sanic, а также изучил различные технологии в NestJS (веб-фреймворк Node.js, Typescript). Фреймворк имеет важную особенность – автоматическая генерация документации: как только ваши конечные точки будут реализованы, вы сможете поиграться с API, используя соответствующий стандартам пользовательский интерфейс. Поддерживаются SwaggerUI, ReDoc и другие. FastAPI построен на удивительной библиотеке Starlette, в результате чего производительность сравнима с Node.js, а в некоторых случаях даже Go! В целом, складывается стойкое предчувствие, что FastAPI будет мчаться вперёд как лучший асинхронный фреймворк для Python. #фреймворки#web
Hashtags
Универсальный парсер статей Пакет newspaper3k позволяет парсить статьи и извлекать из них заголовки, текст, дату публикации, имена авторов и много другой информации. Плюс пакета в том, что весь процесс парсинга автоматизирован и не надо вручную искать нужные теги и тянуть из них данные. Но точность парсера зависит в основном от того, как хорошо сверстана запрашиваемая страница. Поэтому в некоторых случаях результат может отличаться от ожиданий. #парсер#newspaper3k
Hashtags